Deinitialization fixes, in case if QNXGF driver is not initialized properly.
authorMike Gorchak <lestat@i.com.ua>
Fri, 20 Nov 2009 07:06:50 +0000
changeset 3461 87182c69e080
parent 3460 ba48701b0534
child 3462 6265b67848e0
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
src/video/qnxgf/SDL_gf_input.c
src/video/qnxgf/SDL_qnxgf.c
--- a/src/video/qnxgf/SDL_gf_input.c	Thu Nov 19 09:07:09 2009 +0000
+++ b/src/video/qnxgf/SDL_gf_input.c	Fri Nov 20 07:06:50 2009 +0000
@@ -1071,6 +1071,7 @@
 
     status = hidd_connect(&hidparams, &connection);
     if (status != EOK) {
+        connection=NULL;
         return -1;
     }
 
@@ -1097,6 +1098,7 @@
     /* Disconnect from HID server */
     status = hidd_disconnect(connection);
     if (status != EOK) {
+        connection=NULL;
         return -1;
     }
 
@@ -1105,6 +1107,7 @@
 
     status = hidd_connect(&hidparams, &connection);
     if (status != EOK) {
+        connection=NULL;
         return -1;
     }
 
@@ -1119,9 +1122,12 @@
     hiddi_disable_mouse();
 
     /* Disconnect from HID server */
-    status = hidd_disconnect(connection);
-    if (status != EOK) {
-        return -1;
+    if (connection!=NULL)
+    {
+        status = hidd_disconnect(connection);
+        if (status != EOK) {
+            return -1;
+        }
     }
 }
 
--- a/src/video/qnxgf/SDL_qnxgf.c	Thu Nov 19 09:07:09 2009 +0000
+++ b/src/video/qnxgf/SDL_qnxgf.c	Fri Nov 20 07:06:50 2009 +0000
@@ -251,6 +251,9 @@
     }
     device->driverdata = gfdata;
 
+    /* By default GF is not initialized */
+    gfdata->gfinitialized = SDL_FALSE;
+
     /* Try to attach to graphics device driver */
     status =
         gf_dev_attach(&gfdata->gfdev, GF_DEVICE_INDEX(devindex),
@@ -543,9 +546,17 @@
 void
 qnxgf_videoquit(_THIS)
 {
+    SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata;
     SDL_DisplayData *didata = NULL;
     uint32_t it;
 
+    /* Check if GF was initialized before */
+    if ((gfdata == NULL) || (gfdata->gfinitialized != SDL_TRUE))
+    {
+        /* If not, do not deinitialize */
+        return;
+    }
+
     /* Stop collecting mouse events */
     hiddi_disable_mouse();
     /* Delete GF input devices */