From 4384aff43f4ec0691ce866b2637aab66ed580f16 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 1 Mar 2016 14:43:28 +0100 Subject: [PATCH] protect current_request with request_queue_lock --- libs/canvas/wave_view.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc index 3effd9943f..b8d369a2df 100644 --- a/libs/canvas/wave_view.cc +++ b/libs/canvas/wave_view.cc @@ -944,7 +944,10 @@ WaveView::queue_get_image (boost::shared_ptr region, frame /* this will stop rendering in progress (which might otherwise 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 (); @@ -1001,6 +1004,11 @@ WaveView::generate_image (boost::shared_ptr req, bool in_ req->channel, 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); // 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. */ + Glib::Threads::Mutex::Lock lm (request_queue_lock); + if (current_request) { current_request->cancel (); } - Glib::Threads::Mutex::Lock lm (request_queue_lock); /* now remove it from the queue and reset our request pointer so that have no outstanding request (that we know about)