dundee: explicit shutdown the bluetooth file descriptor
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>
Tue, 14 Aug 2012 07:14:32 +0000 (04:14 -0300)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Fri, 17 Aug 2012 12:59:50 +0000 (14:59 +0200)
If we do not shut it down the fd can remain opened. This make impossible
to try a re-connect: busy is returned in this case.

We call shutdown here to make sure that the link is always closed.

dundee/bluetooth.c

index e2e2bca..9ddc72c 100644 (file)
@@ -28,6 +28,7 @@
 #include <fcntl.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/socket.h>
 
 #include <glib.h>
 
@@ -44,6 +45,8 @@ struct bluetooth_device {
        char *address;
        char *name;
 
+       int fd;
+
        DBusPendingCall *call;
 };
 
@@ -54,6 +57,8 @@ static void bt_disconnect(struct dundee_device *device,
 
        DBG("%p", bt);
 
+       shutdown(bt->fd, SHUT_RDWR);
+
        CALLBACK_WITH_SUCCESS(cb, data);
 }
 
@@ -93,6 +98,8 @@ static void bt_connect_reply(DBusPendingCall *call, gpointer user_data)
                goto done;
        }
 
+       bt->fd = fd;
+
        CALLBACK_WITH_SUCCESS(cb, fd, cbd->data);
 
 done: