[Libreoffice-commits] core.git: Branch 'private/swe/libreoffice-5-2+backports' - 3 commits - vcl/source

Stephan Bergmann sbergman at redhat.com
Fri Aug 11 13:07:41 UTC 2017


 vcl/source/app/scheduler.cxx |   26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

New commits:
commit 2767a7effe575af03b71855b3d4b316a97e8be38
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Aug 9 12:14:28 2017 +0200

    Rephrase SchedulerMutex::acquire so it would work for nLockCount=0
    
    Change-Id: Ibd5f45b5829e51f872e90a4256ae875bc5d363d4

diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx
index a3e4924b094d..6f3c4a4c8f35 100644
--- a/vcl/source/app/scheduler.cxx
+++ b/vcl/source/app/scheduler.cxx
@@ -121,12 +121,11 @@ void Scheduler::ImplDeInitScheduler()
 
 bool SchedulerMutex::acquire( sal_uInt32 nLockCount )
 {
-    do {
+    for (sal_uInt32 i = 0; i != nLockCount; ++i) {
         if ( !maMutex.acquire() )
             return false;
         ++mnLockDepth;
     }
-    while ( --nLockCount );
     return true;
 }
 
commit 6a5d2dc840a3af73115fcecdc681d6f26dea5e77
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Aug 9 10:02:35 2017 +0200

    Remove unnecessary, broken check for mnLockDepth != 0
    
    If SchedulerMutex::release were ever called from a thread not having locked the
    mutex, mnLockDepth would have an arbitrary value, not necessarily zero.  It is
    clear that SchedulerMutex::release must only be called by a thread that has the
    mutex locked, so the check was redundant.
    
    Change-Id: I4969b8e6543657602494e333a6a3ea07d83267d1

diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx
index 419cdf23af1f..a3e4924b094d 100644
--- a/vcl/source/app/scheduler.cxx
+++ b/vcl/source/app/scheduler.cxx
@@ -132,14 +132,11 @@ bool SchedulerMutex::acquire( sal_uInt32 nLockCount )
 
 sal_uInt32 SchedulerMutex::release( bool bUnlockAll )
 {
-    sal_uInt32 nLockCount = 0;
-    if ( mnLockDepth )
-    {
-        nLockCount = bUnlockAll ? mnLockDepth : 1;
-        mnLockDepth -= nLockCount;
-        for (sal_uInt32 i = 0; i != nLockCount; ++i) {
-            maMutex.release();
-        }
+    assert(mnLockDepth != 0);
+    sal_uInt32 nLockCount = bUnlockAll ? mnLockDepth : 1;
+    mnLockDepth -= nLockCount;
+    for (sal_uInt32 i = 0; i != nLockCount; ++i) {
+        maMutex.release();
     }
     return nLockCount;
 }
commit 1c6c1329df23d779c46b9928c3cd188c38686996
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Aug 9 08:46:13 2017 +0200

    SchedulerMutex::release: don't read mnLockDepth with maMutex already unlocked
    
    ...another thread may already have called SchedulerMutex::acquire in between,
    whose effect would then be canceled
    
    Change-Id: Icddb6ea47144366c3a81bc83e3f9469b25a18c22

diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx
index ccd127c08453..419cdf23af1f 100644
--- a/vcl/source/app/scheduler.cxx
+++ b/vcl/source/app/scheduler.cxx
@@ -135,19 +135,9 @@ sal_uInt32 SchedulerMutex::release( bool bUnlockAll )
     sal_uInt32 nLockCount = 0;
     if ( mnLockDepth )
     {
-        if ( bUnlockAll )
-        {
-            nLockCount = mnLockDepth;
-            do {
-                --mnLockDepth;
-                maMutex.release();
-            }
-            while ( mnLockDepth );
-        }
-        else
-        {
-            nLockCount = 1;
-            --mnLockDepth;
+        nLockCount = bUnlockAll ? mnLockDepth : 1;
+        mnLockDepth -= nLockCount;
+        for (sal_uInt32 i = 0; i != nLockCount; ++i) {
             maMutex.release();
         }
     }


More information about the Libreoffice-commits mailing list