Fix race condition in processFuncRequestQueue

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.
This commit is contained in:
Juergen Spitzmueller 2018-02-10 15:35:12 +01:00
parent 454f56b5f2
commit dadec50a18

View File

@ -2271,8 +2271,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);
}
}