From 7eb8af13972e60a68013008ffc71a3495ad63144 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 31 Dec 2008 19:27:56 +0100 Subject: [PATCH] Remove watch on shutdown --- plugins/modem.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/modem.c b/plugins/modem.c index 4668bd3..47d7e21 100644 --- a/plugins/modem.c +++ b/plugins/modem.c @@ -40,6 +40,7 @@ struct modem_data { char *device; GIOChannel *channel; + guint watch; GSList *callbacks; GSList *commands; char buf[1024]; @@ -200,7 +201,9 @@ static int open_device(const char *device) tcflush(fd, TCIOFLUSH); /* Switch TTY to raw mode */ + memset(&ti, 0, sizeof(ti)); cfmakeraw(&ti); + tcsetattr(fd, TCSANOW, &ti); return fd; @@ -232,7 +235,7 @@ int modem_open(struct modem_data *modem) modem->channel = g_io_channel_unix_new(fd); g_io_channel_set_close_on_unref(modem->channel, TRUE); - g_io_add_watch(modem->channel, + modem->watch = g_io_add_watch(modem->channel, G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR, modem_event, modem); @@ -246,9 +249,10 @@ int modem_close(struct modem_data *modem) if (modem == NULL) return -ENOENT; - g_io_channel_shutdown(modem->channel, TRUE, NULL); - g_io_channel_unref(modem->channel); + g_source_remove(modem->watch); + modem->watch = 0; + g_io_channel_unref(modem->channel); modem->channel = NULL; return 0; -- 1.7.9.5