https://bugs.documentfoundation.org/show_bug.cgi?id=148435

--- Comment #28 from Peter Hagen <[email protected]> ---
I don't know if anyone is trying to get it solved, but I would like to help get
this resolved. I'm not a C++ + LibreOffice developer, so my help might be
limited. We already identified at what commit this effect started to occur.
This change below seems to be the reason it occurs:

```
diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx
index b325f9238a7d..57b8176521f7 100644
--- a/vcl/source/app/scheduler.cxx
+++ b/vcl/source/app/scheduler.cxx
@@ -430,6 +430,17 @@ bool Scheduler::ProcessTaskScheduling()
                                  << " of " << nTasks << " tasks" );
     UpdateSystemTimer( rSchedCtx, nMinPeriod, true, nTime );

+    // Delay invoking tasks with idle priorities as long as there are user
input or repaint events
+    // in the OS event queue. This will often effectively compress such events
and repaint only
+    // once at the end, improving performance in cases such as repeated
zooming with a complex document.
+    if ( pMostUrgent && pMostUrgent->mePriority >= TaskPriority::HIGH_IDLE
+        && Application::AnyInput( VclInputFlags::MOUSE |
VclInputFlags::KEYBOARD | VclInputFlags::PAINT ))
+    {
+        SAL_INFO( "vcl.schedule", tools::Time::GetSystemTicks()
+            << " idle priority task " << pMostUrgent << " delayed, system
events pending" );
+        pMostUrgent = nullptr;
+    }
```

If I check out the latest code, there are some changes in this part:


```
    // Delay invoking tasks with idle priorities as long as there are user
input or repaint events
    // in the OS event queue. This will often effectively compress such events
and repaint only
    // once at the end, improving performance in cases such as repeated zooming
with a complex document.
    if ( pMostUrgent && pMostUrgent->mePriority >= TaskPriority::HIGH_IDLE
        && Application::AnyInput( VclInputFlags::MOUSE |
VclInputFlags::KEYBOARD | VclInputFlags::PAINT ))
    {
        SAL_INFO( "vcl.schedule", tools::Time::GetSystemTicks()
            << " idle priority task " << pMostUrgent << " delayed, system
events pending" );
        pMostUrgent = nullptr;
        nMinPeriod = 0;
    }

    if (InfiniteTimeoutMs != nMinPeriod)
        SAL_INFO("vcl.schedule",
                 "Calculated minimum timeout as " << nMinPeriod << " of " <<
nTasks << " tasks");
    UpdateSystemTimer(rSchedCtx, nMinPeriod, true, nTime);

    if ( !pMostUrgent )
        return;
```

Further in the code, there is an unlock call. Could it be that exiting this
code, could result in calling the unlock? 

I have no idea what this code does, just trying to think "out loud",

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to