- int n = 0;
- for (list<boost::thread *>::iterator i = _threads.begin(); i != _threads.end(); ++i) {
- LOG_GENERAL ("Terminating thread %1 of %2", n + 1, _threads.size ());
- (*i)->interrupt ();
- DCPOMATIC_ASSERT ((*i)->joinable ());
- try {
- (*i)->join ();
- } catch (boost::thread_interrupted& e) {
- /* This is to be expected */
- }
- delete *i;
- LOG_GENERAL_NC ("Thread terminated");
- ++n;
+ if (!_threads) {
+ return;
+ }
+
+ _threads->interrupt_all ();
+ try {
+ _threads->join_all ();
+ } catch (exception& e) {
+ LOG_ERROR ("join() threw an exception: %1", e.what());
+ } catch (...) {
+ LOG_ERROR_NC ("join() threw an exception");