#include <dcp/exceptions.h>
#include <boost/thread.hpp>
#include <boost/filesystem.hpp>
+#include <iostream>
#include "i18n.h"
#define LOG_ERROR_NC(...) _film->log()->log (__VA_ARGS__, Log::TYPE_ERROR);
+/** @param film Associated film, or 0 */
Job::Job (shared_ptr<const Film> film)
: _film (film)
, _thread (0)
{
if (_thread) {
_thread->interrupt ();
+ DCPOMATIC_ASSERT (_thread->joinable ());
_thread->join ();
}
} catch (std::bad_alloc& e) {
- set_error (_("Out of memory"), _("There was not enough memory to do this."));
+ set_error (_("Out of memory"), _("There was not enough memory to do this. If you are running a 32-bit operating system try reducing the number of encoding threads in the General tab of Preferences."));
set_progress (1);
set_state (FINISHED_ERROR);
LOG_ERROR_NC (s);
LOG_ERROR_NC (d);
- _film->log()->log (String::compose ("Error in job: %1 (%2)", s, d), Log::TYPE_ERROR);
+ if (_film) {
+ _film->log()->log (String::compose ("Error in job: %1 (%2)", s, d), Log::TYPE_ERROR);
+ }
boost::mutex::scoped_lock lm (_state_mutex);
_error_summary = s;
_error_details = d;
}
_thread->interrupt ();
+ DCPOMATIC_ASSERT (_thread->joinable ());
_thread->join ();
+ delete _thread;
+ _thread = 0;
}
void
connection = Finished.connect (finished);
}
}
-