Remove use of DIRECT_RECURSIVE_MUTEX_INITIALIZER its not portable
|
use portable way to initialize recursive mutex using pthread_once() and direct_recursive_mutex_init()
|
|
Upstream-Status: Pending
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
Index: DirectFB-1.7.7/lib/direct/os/linux/glibc/mutex.h
|
===================================================================
|
--- DirectFB-1.7.7.orig/lib/direct/os/linux/glibc/mutex.h
|
+++ DirectFB-1.7.7/lib/direct/os/linux/glibc/mutex.h
|
@@ -46,7 +46,6 @@ struct __D_DirectMutex {
|
/**********************************************************************************************************************/
|
|
#define DIRECT_MUTEX_INITIALIZER(name) { PTHREAD_MUTEX_INITIALIZER }
|
-#define DIRECT_RECURSIVE_MUTEX_INITIALIZER(name) { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP }
|
|
#endif
|
|
Index: DirectFB-1.7.7/lib/direct/trace.c
|
===================================================================
|
--- DirectFB-1.7.7.orig/lib/direct/trace.c
|
+++ DirectFB-1.7.7/lib/direct/trace.c
|
@@ -89,8 +89,15 @@ struct __D_DirectTraceBuffer {
|
/**************************************************************************************************/
|
|
static DirectLink *buffers;
|
-static DirectMutex buffers_lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(buffers_lock);
|
|
+static pthread_once_t buffers_lock_init_once = PTHREAD_ONCE_INIT;
|
+static DirectMutex buffers_lock;
|
+
|
+static void
|
+buffers_lock_init( void )
|
+{
|
+ direct_recursive_mutex_init(&buffers_lock);
|
+}
|
/**************************************************************************************************/
|
|
__dfb_no_instrument_function__
|
@@ -113,6 +120,7 @@ get_trace_buffer( void )
|
|
D_MAGIC_SET( buffer, DirectTraceBuffer );
|
|
+ pthread_once(&buffers_lock_init_once, buffers_lock_init);
|
direct_mutex_lock( &buffers_lock );
|
direct_list_append( &buffers, &buffer->link );
|
direct_mutex_unlock( &buffers_lock );
|
@@ -138,8 +146,14 @@ typedef struct {
|
} SymbolTable;
|
|
static DirectLink *tables = NULL;
|
-static DirectMutex tables_lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(tables_lock);
|
+static pthread_once_t tables_lock_init_once = PTHREAD_ONCE_INIT;
|
+static DirectMutex tables_lock;
|
|
+static void
|
+tables_lock_init( void )
|
+{
|
+ direct_recursive_mutex_init(&tabless_lock);
|
+}
|
|
__dfb_no_instrument_function__
|
static void
|
@@ -370,6 +384,7 @@ direct_trace_lookup_symbol( const char *
|
Symbol *symbol;
|
SymbolTable *table;
|
|
+ pthread_once(&tables_lock_init_once, tables_lock_init);
|
direct_mutex_lock( &tables_lock );
|
|
table = find_table( filename );
|
@@ -514,6 +529,7 @@ direct_trace_print_stacks()
|
DirectTraceBuffer *b;
|
DirectTraceBuffer *buffer = get_trace_buffer();
|
|
+ pthread_once(&buffers_lock_init_once, buffers_lock_init);
|
direct_mutex_lock( &buffers_lock );
|
|
if (buffer && buffer->level)
|
@@ -611,6 +627,7 @@ direct_trace_free_buffer( DirectTraceBuf
|
D_MAGIC_ASSERT( buffer, DirectTraceBuffer );
|
|
if (buffer->thread) {
|
+ pthread_once(&buffers_lock_init_once, buffers_lock_init);
|
direct_mutex_lock( &buffers_lock );
|
direct_list_remove( &buffers, &buffer->link );
|
direct_mutex_unlock( &buffers_lock );
|
Index: DirectFB-1.7.7/src/directfb.c
|
===================================================================
|
--- DirectFB-1.7.7.orig/src/directfb.c
|
+++ DirectFB-1.7.7/src/directfb.c
|
@@ -99,6 +99,15 @@ const unsigned int directfb_micro_versio
|
const unsigned int directfb_binary_age = DIRECTFB_BINARY_AGE;
|
const unsigned int directfb_interface_age = DIRECTFB_INTERFACE_AGE;
|
|
+static pthread_once_t lock_init_once = PTHREAD_ONCE_INIT;
|
+static DirectMutex lock;
|
+
|
+static void
|
+lock_init( void )
|
+{
|
+ direct_recursive_mutex_init(&lock);
|
+}
|
+
|
const char *
|
DirectFBCheckVersion( unsigned int required_major,
|
unsigned int required_minor,
|
@@ -215,8 +224,7 @@ DirectFBCreate( IDirectFB **interface_pt
|
if (dfb_config->remote.host)
|
return CreateRemote( dfb_config->remote.host, dfb_config->remote.port, interface_ptr );
|
|
- static DirectMutex lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(lock);
|
-
|
+ pthread_once(&lock_init_once, lock_init);
|
direct_mutex_lock( &lock );
|
|
if (!dfb_config->no_singleton && idirectfb_singleton) {
|