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:
@@ -181,8 +181,6 @@ bool ConstParams::VisitFunctionDecl(const FunctionDecl * functionDecl)
|
|||||||
|| name == "convert_slashes"
|
|| name == "convert_slashes"
|
||||||
// UNO component entry points
|
// UNO component entry points
|
||||||
|| name.endswith("component_getFactory")
|
|| name.endswith("component_getFactory")
|
||||||
// in Scheduler::, wants to loop until a reference to a bool becomes true
|
|
||||||
|| name == "ProcessEventsToSignal"
|
|
||||||
// external API
|
// external API
|
||||||
|| name == "Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush"
|
|| name == "Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush"
|
||||||
|| name == "egiGraphicExport"
|
|| name == "egiGraphicExport"
|
||||||
|
@@ -64,11 +64,6 @@ public:
|
|||||||
* @see Application::Reschedule
|
* @see Application::Reschedule
|
||||||
*/
|
*/
|
||||||
static void ProcessEventsToIdle();
|
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
|
/// Control the deterministic mode. In this mode, two subsequent runs of
|
||||||
/// LibreOffice fire about the same amount idles.
|
/// LibreOffice fire about the same amount idles.
|
||||||
|
@@ -486,11 +486,6 @@ bool Application::Reschedule( bool i_bAllEvents )
|
|||||||
return ImplYield(false, i_bAllEvents);
|
return ImplYield(false, i_bAllEvents);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scheduler::ProcessEventsToSignal(bool& bSignal)
|
|
||||||
{
|
|
||||||
while (!bSignal && Application::Reschedule() );
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scheduler::ProcessEventsToIdle()
|
void Scheduler::ProcessEventsToIdle()
|
||||||
{
|
{
|
||||||
int nSanity = 1;
|
int nSanity = 1;
|
||||||
|
@@ -96,7 +96,15 @@ IMPL_LINK_NOARG(ExecuteWrapper, ExecuteActionHdl, Timer*, void)
|
|||||||
aIdle.Start();
|
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);
|
std::unique_lock<std::mutex> lock(mMutex);
|
||||||
while (!mbSignal)
|
while (!mbSignal)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user