Destroy Job threads at the start of the subclass destructors,
[dcpomatic.git] / src / lib / job.cc
index 610d486b6bcb087b60ef76cc4c6692316af7da10..d4023973cfb4fd9942032f99f793d4dee04e7627 100644 (file)
@@ -61,6 +61,15 @@ Job::Job (shared_ptr<const Film> film)
 }
 
 Job::~Job ()
+{
+#ifdef DCPOMATIC_DEBUG
+       /* Any subclass should have called destroy_thread in its destructor */
+       assert (!_thread);
+#endif
+}
+
+void
+Job::destroy_thread ()
 {
        if (_thread) {
                _thread->interrupt ();
@@ -75,6 +84,7 @@ Job::~Job ()
        }
 
        delete _thread;
+       _thread = 0;
 }
 
 /** Start the job in a separate thread, returning immediately */
@@ -190,6 +200,12 @@ Job::run_wrapper ()
                set_progress (1);
                set_state (FINISHED_ERROR);
 
+       } catch (FileError& e) {
+
+               set_error (e.what(), e.what());
+               set_progress (1);
+               set_state (FINISHED_ERROR);
+
        } catch (std::exception& e) {
 
                set_error (
@@ -449,7 +465,7 @@ Job::status () const
                        if (now.date() != finish.date()) {
                                /// TRANSLATORS: the %1 in this string will be filled in with a day of the week
                                /// to say what day a job will finish.
-                               day = String::compose (_(" on %1"), finish.date().day_of_week().as_long_string());
+                               day = String::compose (_(" on %1"), day_of_week_to_string(finish.date().day_of_week()));
                        }
                        /// TRANSLATORS: "remaining; finishing at" here follows an amount of time that is remaining
                        /// on an operation; after it is an estimated wall-clock completion time.