On SIGINT, shut down the builder threads
[?]
May 29, 2015, 6:02 PM
T2EIYJNGPIANHKJ4HBJIPTINWKG7RDLHR3PVHFYAPPLHZAJQBVWACDependencies
- [2]
ENXUSMSVMake concurrency more robust - [3]
62MQPRXCPass null values to libpqxx properly - [4]
NJJ7H64SVery basic multi-threaded queue runner - [5]
24BMQDZAStart of single-process hydra-queue-runner
Change contents
- replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 30
bool exitRequested(false);std::atomic<bool> exitRequested(false); - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 148
std::mutex queueMonitorMutex;std::condition_variable queueMonitorWakeup; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 166
std::condition_variable_any runnableCV;std::condition_variable_any runnableWakeup; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 183
void queueMonitorThreadEntry();void queueMonitor(); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 271
void State::queueMonitorThreadEntry()void State::queueMonitor() - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 277
while (true) {while (!exitRequested) { - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 281
std::unique_lock<std::mutex> lock(exitRequestMutex);exitRequest.wait_for(lock, std::chrono::seconds(5));if (exitRequested) break;std::unique_lock<std::mutex> lock(queueMonitorMutex);queueMonitorWakeup.wait_for(lock, std::chrono::seconds(5)); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 554
runnableCV.notify_one();runnableWakeup.notify_one(); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 567
while (runnable_->empty())runnable_.wait(runnableCV);while (runnable_->empty() && !exitRequested)runnable_.wait(runnableWakeup);if (exitRequested) break; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 765
queueMonitorThread = std::thread(&State::queueMonitorThreadEntry, this);queueMonitorThread = std::thread(&State::queueMonitor, this); - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 767
std::vector<std::thread> builderThreads; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 769
std::thread(&State::builderThreadEntry, this, n).detach();builderThreads.push_back(std::thread(&State::builderThreadEntry, this, n));/* Wait for SIGINT. */{std::unique_lock<std::mutex> lock(exitRequestMutex);while (!exitRequested)exitRequest.wait(lock);}printMsg(lvlError, "exiting..."); - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 780
/* Shut down the various threads. */{ std::lock_guard<std::mutex> lock(queueMonitorMutex); } // barrierqueueMonitorWakeup.notify_all(); - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 784
{ auto runnable_(runnable.lock()); } // barrierrunnableWakeup.notify_all();for (auto & thread : builderThreads) thread.join();