Linux/MessageQ: Close the socket upon failure
authorSuman Anna <s-anna@ti.com>
Mon, 27 Oct 2014 18:23:23 +0000 (13:23 -0500)
committerRobert Tivy <rtivy@ti.com>
Tue, 28 Oct 2014 22:14:42 +0000 (15:14 -0700)
The socket created in transportCreateEndpoint is not freed up
immediately if the SocketBindAddr fails, and is not freed up
by the application in the corresponding MessageQ_delete as well.
These unbound sockets only get freed up as part of the process
cleanup of any open file descriptors by the Linux kernel. Close
these sockets proactively, so that there are no stale sockets
present during the execution of a process.

Signed-off-by: Suman Anna <s-anna@ti.com>
linux/src/api/MessageQ.c

index 23025c58a17850d8da022214b452db77532e6781..8b958cbcba7cdccbd0add2425a606d5d21ffd2a2 100644 (file)
@@ -1009,6 +1009,7 @@ static Int transportCreateEndpoint(int * fd, UInt16 rprocId, UInt16 queueIndex)
         /* don't hard-printf since this is no longer fatal */
         PRINTVERBOSE2("transportCreateEndpoint: bind failed: %d, %s\n",
                       errno, strerror(errno));
+        close(*fd);
     }
 
 exit: