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 <elian...@gmail.com> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice