]> git.lyx.org Git - features.git/commitdiff
Fix race condition in processFuncRequestQueue
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 10 Feb 2018 14:35:12 +0000 (15:35 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Sat, 10 Feb 2018 17:32:03 +0000 (18:32 +0100)
The issue here was that the element was only removed from the queue
after the func request was processed, but within that process, other
function could access the queue, so the queue could even be empty
when this function finally wanted to remove the item.

Fixes: #10406.
(cherry picked from commit dadec50a18d92d24d42e1ccf7474f07a2a66b5b4)

src/frontends/qt4/GuiApplication.cpp

index 97a60e9b44763ce389bf6f78dcbeadbe9372a71b..35b639c9ac490e27e09ee25c123afce961eb9840 100644 (file)
@@ -2289,8 +2289,12 @@ void GuiApplication::processFuncRequestAsync(FuncRequest const & func)
 void GuiApplication::processFuncRequestQueue()
 {
        while (!d->func_request_queue_.empty()) {
-               processFuncRequest(d->func_request_queue_.front());
+               // take the item from the stack _before_ processing the
+               // request in order to avoid race conditions from nested
+               // or parallel requests (see #10406)
+               FuncRequest const fr(d->func_request_queue_.front());
                d->func_request_queue_.pop();
+               processFuncRequest(fr);
        }
 }