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