[package] libdirectfb: When volotile keyword is not used, compiler generates code that uses old value of implementations and not the new one set by dlopen()

git-svn-id: svn://svn.openwrt.org/openwrt/packages@35386 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
hcg 2013-01-29 15:26:42 +00:00
parent a38cdb1a62
commit 378b211816
2 changed files with 30 additions and 0 deletions

View File

@ -0,0 +1,30 @@
diff -burN DirectFB-1.4.2.orig/lib/direct/interface.c DirectFB-1.4.2/lib/direct/interface.c
--- DirectFB-1.4.2.orig/lib/direct/interface.c 2013-01-29 13:57:25.000000000 +0100
+++ DirectFB-1.4.2/lib/direct/interface.c 2013-01-29 13:59:37.000000000 +0100
@@ -74,7 +74,7 @@
} DirectInterfaceImplementation;
static pthread_mutex_t implementations_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-static DirectLink *implementations = NULL;
+static DirectLink * volatile implementations = NULL;
/**************************************************************************************************/
@@ -96,7 +96,7 @@
D_DEBUG_AT( Direct_Interface, " -> %s | %s\n", impl->type, impl->implementation );
pthread_mutex_lock( &implementations_mutex );
- direct_list_prepend( &implementations, &impl->link );
+ direct_list_prepend( (DirectLink**)&implementations, &impl->link );
pthread_mutex_unlock( &implementations_mutex );
}
@@ -111,7 +111,7 @@
D_MAGIC_ASSERT( impl, DirectInterfaceImplementation );
if (impl->funcs == funcs) {
- direct_list_remove( &implementations, &impl->link );
+ direct_list_remove( (DirectLink**)&implementations, &impl->link );
break;
}