blob: ac48f68db72dd15cc8f9cd6f5094a379afb2713a [file] [log] [blame]
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05001Remove use of DIRECT_RECURSIVE_MUTEX_INITIALIZER its not portable
2use portable way to initialize recursive mutex using pthread_once() and direct_recursive_mutex_init()
3
4Upstream-Status: Pending
5Signed-off-by: Khem Raj <raj.khem@gmail.com>
6Index: DirectFB-1.7.7/lib/direct/os/linux/glibc/mutex.h
7===================================================================
8--- DirectFB-1.7.7.orig/lib/direct/os/linux/glibc/mutex.h
9+++ DirectFB-1.7.7/lib/direct/os/linux/glibc/mutex.h
10@@ -46,7 +46,6 @@ struct __D_DirectMutex {
11 /**********************************************************************************************************************/
12
13 #define DIRECT_MUTEX_INITIALIZER(name) { PTHREAD_MUTEX_INITIALIZER }
14-#define DIRECT_RECURSIVE_MUTEX_INITIALIZER(name) { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP }
15
16 #endif
17
18Index: DirectFB-1.7.7/lib/direct/trace.c
19===================================================================
20--- DirectFB-1.7.7.orig/lib/direct/trace.c
21+++ DirectFB-1.7.7/lib/direct/trace.c
22@@ -89,8 +89,15 @@ struct __D_DirectTraceBuffer {
23 /**************************************************************************************************/
24
25 static DirectLink *buffers;
26-static DirectMutex buffers_lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(buffers_lock);
27
28+static pthread_once_t buffers_lock_init_once = PTHREAD_ONCE_INIT;
29+static DirectMutex buffers_lock;
30+
31+static void
32+buffers_lock_init( void )
33+{
34+ direct_recursive_mutex_init(&buffers_lock);
35+}
36 /**************************************************************************************************/
37
38 __dfb_no_instrument_function__
39@@ -113,6 +120,7 @@ get_trace_buffer( void )
40
41 D_MAGIC_SET( buffer, DirectTraceBuffer );
42
43+ pthread_once(&buffers_lock_init_once, buffers_lock_init);
44 direct_mutex_lock( &buffers_lock );
45 direct_list_append( &buffers, &buffer->link );
46 direct_mutex_unlock( &buffers_lock );
47@@ -138,8 +146,14 @@ typedef struct {
48 } SymbolTable;
49
50 static DirectLink *tables = NULL;
51-static DirectMutex tables_lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(tables_lock);
52+static pthread_once_t tables_lock_init_once = PTHREAD_ONCE_INIT;
53+static DirectMutex tables_lock;
54
55+static void
56+tables_lock_init( void )
57+{
58+ direct_recursive_mutex_init(&tabless_lock);
59+}
60
61 __dfb_no_instrument_function__
62 static void
63@@ -370,6 +384,7 @@ direct_trace_lookup_symbol( const char *
64 Symbol *symbol;
65 SymbolTable *table;
66
67+ pthread_once(&tables_lock_init_once, tables_lock_init);
68 direct_mutex_lock( &tables_lock );
69
70 table = find_table( filename );
71@@ -514,6 +529,7 @@ direct_trace_print_stacks()
72 DirectTraceBuffer *b;
73 DirectTraceBuffer *buffer = get_trace_buffer();
74
75+ pthread_once(&buffers_lock_init_once, buffers_lock_init);
76 direct_mutex_lock( &buffers_lock );
77
78 if (buffer && buffer->level)
79@@ -611,6 +627,7 @@ direct_trace_free_buffer( DirectTraceBuf
80 D_MAGIC_ASSERT( buffer, DirectTraceBuffer );
81
82 if (buffer->thread) {
83+ pthread_once(&buffers_lock_init_once, buffers_lock_init);
84 direct_mutex_lock( &buffers_lock );
85 direct_list_remove( &buffers, &buffer->link );
86 direct_mutex_unlock( &buffers_lock );
87Index: DirectFB-1.7.7/src/directfb.c
88===================================================================
89--- DirectFB-1.7.7.orig/src/directfb.c
90+++ DirectFB-1.7.7/src/directfb.c
91@@ -99,6 +99,15 @@ const unsigned int directfb_micro_versio
92 const unsigned int directfb_binary_age = DIRECTFB_BINARY_AGE;
93 const unsigned int directfb_interface_age = DIRECTFB_INTERFACE_AGE;
94
95+static pthread_once_t lock_init_once = PTHREAD_ONCE_INIT;
96+static DirectMutex lock;
97+
98+static void
99+lock_init( void )
100+{
101+ direct_recursive_mutex_init(&lock);
102+}
103+
104 const char *
105 DirectFBCheckVersion( unsigned int required_major,
106 unsigned int required_minor,
107@@ -215,8 +224,7 @@ DirectFBCreate( IDirectFB **interface_pt
108 if (dfb_config->remote.host)
109 return CreateRemote( dfb_config->remote.host, dfb_config->remote.port, interface_ptr );
110
111- static DirectMutex lock = DIRECT_RECURSIVE_MUTEX_INITIALIZER(lock);
112-
113+ pthread_once(&lock_init_once, lock_init);
114 direct_mutex_lock( &lock );
115
116 if (!dfb_config->no_singleton && idirectfb_singleton) {