summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-07-19 13:07:41 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-07-19 18:55:48 +1000
commitff389f91a2efec5184b56b8c717091d067f8fc46 (patch)
treeee51feed1a199ef5654071d58810776f68c6c680
parentf5aede2ed48f1cc7266e792b02f509f7b207e2d6 (diff)
Don't free anything in PreInit, let the server call UnInit instead
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/xf86PM.c24
-rw-r--r--src/xf86PM.h2
2 files changed, 18 insertions, 8 deletions
diff --git a/src/xf86PM.c b/src/xf86PM.c
index 97e2134..ef73164 100644
--- a/src/xf86PM.c
+++ b/src/xf86PM.c
@@ -79,7 +79,7 @@ _X_EXPORT InputDriverRec PENMOUNT = {
"penmount",
NULL,
PenMountPreInit,
- /*PenMountUnInit*/NULL,
+ PenMountUnInit,
NULL,
default_options
};
@@ -275,6 +275,7 @@ ProcessDeviceClose(PenMountPrivatePtr priv, DeviceIntPtr dev, InputInfoPtr pInfo
priv->buffer = NULL;
}
xf86CloseSerial(pInfo->fd);
+ pInfo->fd = -1;
}
dev->public.on = FALSE;
return (Success);
@@ -454,6 +455,8 @@ PenMountPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
goto SetupProc_fail;
}
xf86CloseSerial(pInfo->fd);
+ pInfo->fd = -1;
+
/*
* Process the options for your device like this
*/
@@ -495,16 +498,21 @@ PenMountPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
return Success;
SetupProc_fail:
- if ((pInfo) && (pInfo->fd))
- xf86CloseSerial (pInfo->fd);
- if ((pInfo) && (pInfo->name))
- free (pInfo->name);
+ return BadValue;
+}
+
+static void
+PenMountUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
+{
+ PenMountPrivatePtr priv = (PenMountPrivatePtr) (pInfo->private);
- if ((priv) && (priv->buffer))
- XisbFree (priv->buffer);
if (priv)
+ {
+ if (priv->buffer)
+ XisbFree (priv->buffer);
free (priv);
- return BadValue;
+ pInfo->private = NULL;
+ }
}
static Bool
diff --git a/src/xf86PM.h b/src/xf86PM.h
index 5183f91..88da048 100644
--- a/src/xf86PM.h
+++ b/src/xf86PM.h
@@ -93,6 +93,8 @@ static Bool PenMountSendPacket (PenMountPrivatePtr priv, unsigned char *buf, int
static int
PenMountPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags);
+static void
+PenMountUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags);
static void
PenMountPtrCtrl(DeviceIntPtr device, PtrCtrl *ctrl);