Access to ProcessEventsToSignal's bSignal is racy
...so spell out its single use, locking the appropriate mutex around the access Change-Id: I8e8f47de1979f5a80cf1ad65e5ec24d25145c463 Reviewed-on: https://gerrit.libreoffice.org/42908 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
parent
736a4e659c
commit
0d43f5176d
@ -181,8 +181,6 @@ bool ConstParams::VisitFunctionDecl(const FunctionDecl * functionDecl)
|
||||
|| name == "convert_slashes"
|
||||
// UNO component entry points
|
||||
|| name.endswith("component_getFactory")
|
||||
// in Scheduler::, wants to loop until a reference to a bool becomes true
|
||||
|| name == "ProcessEventsToSignal"
|
||||
// external API
|
||||
|| name == "Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush"
|
||||
|| name == "egiGraphicExport"
|
||||
|
@ -64,11 +64,6 @@ public:
|
||||
* @see Application::Reschedule
|
||||
*/
|
||||
static void ProcessEventsToIdle();
|
||||
/**
|
||||
* Process events until the parameter turns true,
|
||||
* allows processing until a specific event has been processed
|
||||
*/
|
||||
static void ProcessEventsToSignal(bool& bSignal);
|
||||
|
||||
/// Control the deterministic mode. In this mode, two subsequent runs of
|
||||
/// LibreOffice fire about the same amount idles.
|
||||
|
@ -486,11 +486,6 @@ bool Application::Reschedule( bool i_bAllEvents )
|
||||
return ImplYield(false, i_bAllEvents);
|
||||
}
|
||||
|
||||
void Scheduler::ProcessEventsToSignal(bool& bSignal)
|
||||
{
|
||||
while (!bSignal && Application::Reschedule() );
|
||||
}
|
||||
|
||||
void Scheduler::ProcessEventsToIdle()
|
||||
{
|
||||
int nSanity = 1;
|
||||
|
@ -96,7 +96,15 @@ IMPL_LINK_NOARG(ExecuteWrapper, ExecuteActionHdl, Timer*, void)
|
||||
aIdle.Start();
|
||||
}
|
||||
|
||||
Scheduler::ProcessEventsToSignal(mbSignal);
|
||||
for (;;) {
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
if (mbSignal) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Application::Reschedule();
|
||||
}
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
while (!mbSignal)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user