OSDN Git Service

android/socket: Fix rfsock lists
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Thu, 28 Nov 2013 14:38:02 +0000 (16:38 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Fri, 29 Nov 2013 08:29:51 +0000 (10:29 +0200)
This fixes several places where rfsock structure were not removed
from the list due to connection errors.

android/socket.c

index 4550dc8..85f1ec4 100644 (file)
@@ -625,8 +625,6 @@ static void accept_cb(GIOChannel *io, GError *err, gpointer user_data)
                return;
        }
 
-       connections = g_list_append(connections, rfsock_acc);
-
        DBG("rfsock: fd %d real_sock %d chan %u sock %d",
                rfsock->fd, rfsock->real_sock, rfsock->channel,
                sock_acc);
@@ -636,6 +634,8 @@ static void accept_cb(GIOChannel *io, GError *err, gpointer user_data)
                return;
        }
 
+       connections = g_list_append(connections, rfsock_acc);
+
        /* Handle events from Android */
        cond = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL;
        io_stack = g_io_channel_unix_new(rfsock_acc->fd);
@@ -700,7 +700,6 @@ static int handle_listen(void *buf)
        }
 
        rfsock->real_sock = g_io_channel_unix_get_fd(io);
-       servers = g_list_append(servers, rfsock);
 
        /* TODO: Add server watch */
        g_io_channel_set_close_on_unref(io, TRUE);
@@ -717,6 +716,8 @@ static int handle_listen(void *buf)
 
        rfsock->service_handle = sdp_service_register(profile, cmd->name);
 
+       servers = g_list_append(servers, rfsock);
+
        return hal_fd;
 }
 
@@ -787,6 +788,7 @@ static void connect_cb(GIOChannel *io, GError *err, gpointer user_data)
 
        return;
 fail:
+       connections = g_list_remove(connections, rfsock);
        cleanup_rfsock(rfsock);
 }
 
@@ -865,6 +867,7 @@ static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
 
        return;
 fail:
+       connections = g_list_remove(connections, rfsock);
        cleanup_rfsock(rfsock);
 }