13
0

protect current_request with request_queue_lock

This commit is contained in:
Robin Gareus 2016-03-01 14:43:28 +01:00
parent 36d30f8c89
commit 4384aff43f

View File

@ -944,7 +944,10 @@ WaveView::queue_get_image (boost::shared_ptr<const ARDOUR::Region> region, frame
/* this will stop rendering in progress (which might otherwise /* this will stop rendering in progress (which might otherwise
be long lived) for any current request. be long lived) for any current request.
*/ */
current_request->cancel (); Glib::Threads::Mutex::Lock lm (request_queue_lock);
if (current_request) {
current_request->cancel ();
}
} }
start_drawing_thread (); start_drawing_thread ();
@ -1001,6 +1004,11 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_
req->channel, req->channel,
req->samples_per_pixel); req->samples_per_pixel);
if (req->should_stop()) {
cerr << "Request stopped after reading peaks\n";
return;
}
req->image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, req->height); req->image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, req->height);
// http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-create // http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-create
@ -1491,11 +1499,12 @@ WaveView::cancel_my_render_request () const
* ever starting up. * ever starting up.
*/ */
Glib::Threads::Mutex::Lock lm (request_queue_lock);
if (current_request) { if (current_request) {
current_request->cancel (); current_request->cancel ();
} }
Glib::Threads::Mutex::Lock lm (request_queue_lock);
/* now remove it from the queue and reset our request pointer so that /* now remove it from the queue and reset our request pointer so that
have no outstanding request (that we know about) have no outstanding request (that we know about)