Fix duplicated local_socket_close for track-device.
authorKim Gunsoo <gunsoo83.kim@samsung.com>
Wed, 2 Sep 2015 05:49:06 +0000 (14:49 +0900)
committerKim Gunsoo <gunsoo83.kim@samsung.com>
Wed, 2 Sep 2015 05:49:06 +0000 (14:49 +0900)
- When device_tracker_send that sends the device list info
  to the client is failed, local_socket_close is called twice.
- If double close is occurred, the sdb server is terminated
  because it is wrong routine for fd management.

Change-Id: I93edb5b241abd88a1b20bc07c0590ec85669a70f
Signed-off-by: Kim Gunsoo <gunsoo83.kim@samsung.com>
src/sockets.c

index b5eaaad9760a9630eb7b5bed4551861d4b38cb71..1239c0ed1f3285a6a41cf759fb3050fea103df58 100755 (executable)
@@ -1289,8 +1289,7 @@ static int smart_socket_enqueue(SDB_SOCKET *s, PACKET *p)
             char buffer[1024];
             int len;
             len = list_transports_msg(buffer, sizeof(buffer));
-            device_tracker_send(s, buffer, len);
-            return 0;
+            return device_tracker_send(s, buffer, len);
         }
         else {
             D( "LS(%X): couldn't create host service '%s'\n", s->local_id, service );
@@ -1383,7 +1382,11 @@ device_tracker_send( SDB_SOCKET* local_socket,
     p->len = len;
     p->ptr = p->data;
     //packet should not be freed after local_socket_enqueue because it can be still used in local socket packet queue.
-    return local_socket_enqueue( local_socket, p );
+    if (local_socket_enqueue( local_socket, p ) == 1) {
+        //error occurred
+        return -1;
+    }
+    return 0;
 }
 
 int notify_qemu(char* host, int port, char* serial) {