[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