You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2021/05/17 20:29:07 UTC

[thrift] 01/01: THRIFT-5399: Fix socket leak in abnormal situation

This is an automated email from the ASF dual-hosted git repository.

jensg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git

commit 8101302c568bf7631448f11f7a5f6a22287d5cbe
Author: lm2048 <li...@163.com>
AuthorDate: Fri Apr 16 23:36:55 2021 +0800

    THRIFT-5399: Fix socket leak in abnormal situation
---
 lib/c_glib/src/thrift/c_glib/transport/thrift_server_socket.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/c_glib/src/thrift/c_glib/transport/thrift_server_socket.c b/lib/c_glib/src/thrift/c_glib/transport/thrift_server_socket.c
index 1abd615..74def29 100644
--- a/lib/c_glib/src/thrift/c_glib/transport/thrift_server_socket.c
+++ b/lib/c_glib/src/thrift/c_glib/transport/thrift_server_socket.c
@@ -72,6 +72,8 @@ thrift_server_socket_listen (ThriftServerTransport *transport, GError **error)
     g_set_error (error, THRIFT_SERVER_SOCKET_ERROR,
                  THRIFT_SERVER_SOCKET_ERROR_SETSOCKOPT,
                  "unable to set SO_REUSEADDR - %s", strerror(errno));
+    close (tsocket->sd);
+    tsocket->sd = THRIFT_INVALID_SOCKET;
     return FALSE;
   }
 
@@ -90,6 +92,8 @@ thrift_server_socket_listen (ThriftServerTransport *transport, GError **error)
                    THRIFT_SERVER_SOCKET_ERROR_BIND,
                    "failed to bind to path %s: - %s",
                    tsocket->path, strerror(errno));
+      close (tsocket->sd);
+      tsocket->sd = THRIFT_INVALID_SOCKET;
       return FALSE;
     }
   }
@@ -108,6 +112,8 @@ thrift_server_socket_listen (ThriftServerTransport *transport, GError **error)
                    THRIFT_SERVER_SOCKET_ERROR_BIND,
                    "failed to bind to port %d - %s",
                    tsocket->port, strerror(errno));
+      close (tsocket->sd);
+      tsocket->sd = THRIFT_INVALID_SOCKET;
       return FALSE;
     }
   }
@@ -120,7 +126,6 @@ thrift_server_socket_listen (ThriftServerTransport *transport, GError **error)
                    THRIFT_SERVER_SOCKET_ERROR_BIND,
                    "failed to listen to path %s: - %s",
                    tsocket->path, strerror(errno));
-      return FALSE;
     }
     else
     {
@@ -128,8 +133,10 @@ thrift_server_socket_listen (ThriftServerTransport *transport, GError **error)
                    THRIFT_SERVER_SOCKET_ERROR_LISTEN,
                    "failed to listen to port %d - %s",
                    tsocket->port, strerror(errno));
-      return FALSE;
     }
+    close (tsocket->sd);
+    tsocket->sd = THRIFT_INVALID_SOCKET;
+    return FALSE;
   }
 
   return TRUE;