[PATCH] Remove code marked by HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL tag.

Vlastimil Jinoch (via Code Review) gerrit at gerrit.libreoffice.org
Tue Apr 9 07:08:03 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3289

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/89/3289/1

Remove code marked by HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL tag.

Change-Id: Ib87e3a5155176a6ce0531e04b08a2731a9c956a7
---
M vcl/unx/gtk/app/gtkinst.cxx
1 file changed, 4 insertions(+), 122 deletions(-)



diff --git a/vcl/unx/gtk/app/gtkinst.cxx b/vcl/unx/gtk/app/gtkinst.cxx
index 0717246..678c8ed 100644
--- a/vcl/unx/gtk/app/gtkinst.cxx
+++ b/vcl/unx/gtk/app/gtkinst.cxx
@@ -111,22 +111,15 @@
     }
     static bool hookLocks( oslModule pModule )
     {
-        typedef void (*GdkLockFn) (GCallback enter_fn, GCallback leave_fn);
-
-        GdkLockFn gdk_threads_set_lock_functions =
-                (GdkLockFn) osl_getAsciiFunctionSymbol( pModule, "gdk_threads_set_lock_functions" );
-        if ( !gdk_threads_set_lock_functions )
-        {
-#if OSL_DEBUG_LEVEL > 1
-            fprintf( stderr, "Failed to hook gdk threads locks\n" );
+#if !GTK_CHECK_VERSION(2,4,0)
+        g_error("no lock hooking!");
 #endif
-            return false;
-        }
-
         gdk_threads_set_lock_functions (GdkThreadsEnter, GdkThreadsLeave);
+
 #if OSL_DEBUG_LEVEL > 1
         fprintf( stderr, "Hooked gdk threads locks\n" );
 #endif
+        (void)pModule;
         return true;
     }
 
@@ -168,12 +161,6 @@
 
         if ( hookLocks( pModule ) )
             pYieldMutex = new GtkHookedYieldMutex();
-        else
-#if GTK_CHECK_VERSION(3,0,0)
-            g_error ("impossible case for gtk3");
-#else
-            pYieldMutex = new GtkYieldMutex();
-#endif
 
         gdk_threads_init();
 
@@ -354,135 +341,30 @@
 
 void GtkYieldMutex::acquire()
 {
-#ifdef HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL
-    oslThreadIdentifier aCurrentThread = osl::Thread::getCurrentIdentifier();
-    // protect member manipulation
-    SolarMutexObject::acquire();
-    if( mnCount > 0 && mnThreadId == aCurrentThread )
-    {
-        mnCount++;
-        SolarMutexObject::release();
-        return;
-    }
-    SolarMutexObject::release();
-
-    // obtain gdk mutex
-    gdk_threads_enter();
-
-    // obtained gdk mutex, now lock count is one by definition
-    SolarMutexObject::acquire();
-    mnCount = 1;
-    mnThreadId = aCurrentThread;
-    SolarMutexObject::release();
-#else
     g_error ("never called");
-#endif
 }
 
 void GtkYieldMutex::release()
 {
-#ifdef HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL
-    oslThreadIdentifier aCurrentThread = osl::Thread::getCurrentIdentifier();
-    // protect member manipulation
-    SolarMutexObject::acquire();
-    // strange things happen, do nothing if we don't own the mutex
-    if( mnThreadId == aCurrentThread )
-    {
-        mnCount--;
-        if( mnCount == 0 )
-        {
-            gdk_threads_leave();
-            mnThreadId = 0;
-        }
-    }
-    SolarMutexObject::release();
-#else
     g_error ("never called");
-#endif
 }
 
 sal_Bool GtkYieldMutex::tryToAcquire()
 {
-#ifdef HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL
-    oslThreadIdentifier aCurrentThread = osl::Thread::getCurrentIdentifier();
-    // protect member manipulation
-    SolarMutexObject::acquire();
-    if( mnCount > 0 )
-    {
-        if( mnThreadId == aCurrentThread )
-        {
-            mnCount++;
-            SolarMutexObject::release();
-            return sal_True;
-        }
-        else
-        {
-            SolarMutexObject::release();
-            return sal_False;
-        }
-    }
-    SolarMutexObject::release();
-
-    // HACK: gdk_threads_mutex is private, we shouldn't use it.
-    // how to we do a try_lock without having a gdk_threads_try_enter ?
-    if( ! g_mutex_trylock( gdk_threads_mutex ) )
-        return sal_False;
-
-    // obtained gdk mutex, now lock count is one by definition
-    SolarMutexObject::acquire();
-    mnCount = 1;
-    mnThreadId = aCurrentThread;
-    SolarMutexObject::release();
-
-#else
     g_error ("never called");
-#endif
     return sal_True;
 }
 
 int GtkYieldMutex::Grab()
 {
-#ifdef HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL
-    // this MUST only be called by gdk/gtk callbacks:
-    // they are entered with gdk mutex locked; the mutex
-    // was unlocked by GtkYieldMutex befor yielding which
-    // is now locked again by gtk implicitly
-
-    // obtained gdk mutex, now lock count is one by definition
-    SolarMutexObject::acquire();
-    int nRet = mnCount;
-    if( mnCount == 0 ) // recursive else
-        mnThreadId = osl::Thread::getCurrentIdentifier();
-#if OSL_DEBUG_LEVEL > 1
-    else if( mnThreadId != osl::Thread::getCurrentIdentifier() )
-    {
-        fprintf( stderr, "Yield mutex grabbed in different thread !\n" );
-        abort();
-    }
-#endif
-    mnCount = 1;
-    SolarMutexObject::release();
-    return nRet;
-#else
     g_error ("never called");
     return sal_True;
-#endif
 }
 
 void GtkYieldMutex::Ungrab( int nGrabs )
 {
-#ifdef HORRIBLE_OBSOLETE_YIELDMUTEX_IMPL
-    // this MUST only be called when leaving the callback
-    // that locked the mutex with Grab()
-    SolarMutexObject::acquire();
-    mnCount = nGrabs;
-    if( mnCount == 0 )
-        mnThreadId = 0;
-    SolarMutexObject::release();
-#else
     (void)nGrabs;
     g_error ("never called");
-#endif
 }
 
 SalVirtualDevice* GtkInstance::CreateVirtualDevice( SalGraphics *pG,

-- 
To view, visit https://gerrit.libreoffice.org/3289
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib87e3a5155176a6ce0531e04b08a2731a9c956a7
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Vlastimil Jinoch <elianoss at gmail.com>



More information about the LibreOffice mailing list