directfb: add fusion patch for hangs
authorLauren Post <lauren.post@freescale.com>
Mon, 19 Aug 2013 19:17:44 +0000 (14:17 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 22 Aug 2013 17:30:04 +0000 (18:30 +0100)
The following tests hang on exit:   direct_test, fusion_skirmish

(From OE-Core rev: 46b8009d668478c5ed3e8b64c65f1de2a4dc25b3)

Signed-off-by: Lauren Post <lauren.post@freescale.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-graphics/directfb/directfb.inc
meta/recipes-graphics/directfb/directfb/fusion.patch [new file with mode: 0755]

index 60b12f7..a23209f 100644 (file)
@@ -14,7 +14,8 @@ DEPENDS = "jpeg libpng freetype zlib tslib"
 INC_PR = "r0"
 
 SRC_URI = "http://directfb.org/downloads/Core/DirectFB-1.6/DirectFB-${PV}.tar.gz \
-           file://configurefix.patch"
+           file://configurefix.patch \
+           file://fusion.patch"
 
 S = "${WORKDIR}/DirectFB-${PV}"
 
diff --git a/meta/recipes-graphics/directfb/directfb/fusion.patch b/meta/recipes-graphics/directfb/directfb/fusion.patch
new file mode 100755 (executable)
index 0000000..1f81a67
--- /dev/null
@@ -0,0 +1,36 @@
+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;