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 <[email protected]> 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;
