fix race condition when switching vt and exiting directfb at the same time
(reproducible using: splashy shutdown; sleep 1; splashy_update exit; chvt 1)

Signed-off-by: Olivier Blin <bl...@mandriva.com>
---
 src/core/input.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/core/input.c b/src/core/input.c
index 97295e7..faa3861 100644
--- a/src/core/input.c
+++ b/src/core/input.c
@@ -482,6 +482,8 @@ dfb_input_core_shutdown( DFBInputCore *data,
           fusion_skirmish_destroy( &devshared->lock );
 
           if (device->driver_data != NULL) {
+               void *driver_data;
+
                D_ASSERT( driver->funcs != NULL );
                D_ASSERT( driver->funcs->CloseDevice != NULL );
 
@@ -490,8 +492,9 @@ dfb_input_core_shutdown( DFBInputCore *data,
                            driver->info.version.major,
                            driver->info.version.minor, driver->info.vendor );
 
-               driver->funcs->CloseDevice( device->driver_data );
+               driver_data = device->driver_data;
                device->driver_data = NULL;
+               driver->funcs->CloseDevice( driver_data );
           }
 
           if (!--driver->nr_devices) {
@@ -576,6 +579,8 @@ dfb_input_core_suspend( DFBInputCore *data )
           D_ASSERT( devshared != NULL );
 
           if (device->driver_data != NULL) {
+               void *driver_data;
+
                D_ASSERT( driver->funcs != NULL );
                D_ASSERT( driver->funcs->CloseDevice != NULL );
 
@@ -584,8 +589,9 @@ dfb_input_core_suspend( DFBInputCore *data )
                            driver->info.version.major,
                            driver->info.version.minor, driver->info.vendor );
 
-               driver->funcs->CloseDevice( device->driver_data );
+               driver_data = device->driver_data;
                device->driver_data = NULL;
+               driver->funcs->CloseDevice( driver_data );
           }
 
           flush_keys( device );
-- 
1.6.2.4

_______________________________________________
directfb-dev mailing list
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to