37 lines
1.6 KiB
Diff
37 lines
1.6 KiB
Diff
directfb: Fix for hangs in direct_test, fusion_skirmish on exit
|
|
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Lauren Post <lauren.post@freescale.com>
|
|
|
|
--- a/lib/fusion/fusion.c 2013-01-18 22:57:11.000000000 +0800
|
|
+++ b/lib/fusion/fusion.c 2013-07-04 10:42:56.502699119 +0800
|
|
@@ -2853,9 +2853,14 @@
|
|
direct_mutex_lock( &world->event_dispatcher_mutex );
|
|
|
|
while (1) {
|
|
- if (!world->event_dispatcher_buffers)
|
|
+ if (!world->event_dispatcher_buffers){
|
|
direct_waitqueue_wait( &world->event_dispatcher_cond, &world->event_dispatcher_mutex );
|
|
-
|
|
+ if (world->dispatch_stop) {
|
|
+ D_DEBUG_AT( Fusion_Main_Dispatch, " -> IGNORING (dispatch_stop!)\n" );
|
|
+ direct_mutex_unlock( &world->event_dispatcher_mutex );
|
|
+ return NULL;
|
|
+ }
|
|
+ }
|
|
buf = (FusionEventDispatcherBuffer *)world->event_dispatcher_buffers;
|
|
D_MAGIC_ASSERT( buf, FusionEventDispatcherBuffer );
|
|
|
|
@@ -2872,6 +2877,11 @@
|
|
//D_INFO("waiting...\n");
|
|
D_ASSERT( buf->read_pos == buf->write_pos );
|
|
direct_waitqueue_wait( &world->event_dispatcher_cond, &world->event_dispatcher_mutex );
|
|
+ if (world->dispatch_stop) {
|
|
+ D_DEBUG_AT( Fusion_Main_Dispatch, " -> IGNORING (dispatch_stop!)\n" );
|
|
+ direct_mutex_unlock( &world->event_dispatcher_mutex );
|
|
+ return NULL;
|
|
+ }
|
|
}
|
|
|
|
buf = (FusionEventDispatcherBuffer *)world->event_dispatcher_buffers;
|