Deinitialization fixes, in case if QNXGF driver is not initialized properly.
--- 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 */