remove invalid assertion - #6634
authorRobin Gareus <robin@gareus.org>
Thu, 22 Oct 2015 10:20:42 +0000 (12:20 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 22 Oct 2015 10:20:42 +0000 (12:20 +0200)
There is a highly unlikely case where the render thread can have zero
requests in the queue, but it is not supposed to be terminated.

 1) WaveView::queue_get_image();
wake up thread, *but* the thread does not start yet
 2) WaveView::cancel_my_render_request();
and now the thread starts.

1,2 are initiated by user actions from the GUI thread and are normally
orders of magnitude slower than scheduler-thread wakeup.

libs/canvas/wave_view.cc

index fce30e7f3820d35d502dae7de49f9ab5fc09e410..a193e8c33945fd64a6e316c88c15bbf6e1b84bbb 100644 (file)
@@ -1508,7 +1508,7 @@ WaveView::start_drawing_thread ()
 void
 WaveView::stop_drawing_thread ()
 {
-       if (_drawing_thread) {
+       while (_drawing_thread) {
                Glib::Threads::Mutex::Lock lm (request_queue_lock);
                g_atomic_int_set (&drawing_thread_should_quit, 1);
                request_cond.signal ();
@@ -1537,8 +1537,7 @@ WaveView::drawing_thread ()
                }
 
                if (request_queue.empty()) {
-                       assert (g_atomic_int_get (&drawing_thread_should_quit));
-                       continue; // or break;
+                       continue;
                }
 
                /* remove the request from the queue (remember: the "request"