Fix fd leak 77/304177/2
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 11 Jan 2024 11:00:59 +0000 (20:00 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Fri, 12 Jan 2024 00:44:51 +0000 (09:44 +0900)
If the Send() returns an error, the aul library should close the file
descriptor when the socket option is not AUL_SOCK_ASYNC.

Change-Id: I84119f6af4e0643d688f6c81a86de6491ba5a7af
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/aul_sock.cc

index f8cc053..23903a3 100644 (file)
@@ -186,8 +186,8 @@ int SendAndReceive(ClientSocket* client, int cmd, unsigned char* data,
 
   int ret = client->Send(parcel.GetData(), parcel.GetDataSize());
   if (ret != 0 || opt & AUL_SOCK_NOREPLY) {
-    if (opt & AUL_SOCK_ASYNC)
-      client->RemoveFd();
+    if (!(opt & AUL_SOCK_ASYNC))
+      client->Close();
 
     return ret;
   }
@@ -206,7 +206,13 @@ int SendAndReceive(ClientSocket* client, int cmd, unsigned char* data,
 int SendAndReceive(int fd, int cmd, unsigned char* data, int datalen,
     int opt) {
   ClientSocket client(fd);
-  return SendAndReceive(&client, cmd, data, datalen, opt);
+  int ret = SendAndReceive(&client, cmd, data, datalen, opt);
+  if (ret < 0) {
+    if (opt & AUL_SOCK_ASYNC)
+      client.RemoveFd();
+  }
+
+  return ret;
 }
 
 int SendAndReceive(int pid, uid_t uid, int cmd, unsigned char* data,