liumin created THRIFT-5399: ------------------------------ Summary: Fix socket leak in abnormal situation Key: THRIFT-5399 URL: https://issues.apache.org/jira/browse/THRIFT-5399 Project: Thrift Issue Type: Bug Components: C glib - Library Affects Versions: 0.14.1, 0.14.0, 0.13.0, 0.12.0 Reporter: liumin Fix For: 0.15.0
In "thrift_server_socket_listen" function, after the socket is created, the exception branch does not have a close socket. gboolean thrift_server_socket_listen (ThriftServerTransport *transport, GError **error) { int enabled = 1; /* for setsockopt() */ ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport); const int socket_domain = tsocket->path ? PF_UNIX : AF_INET; /* create a socket */ if ((tsocket->sd = socket (socket_domain, SOCK_STREAM, 0)) == -1) { g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, THRIFT_SERVER_SOCKET_ERROR_SOCKET, "failed to create socket - %s", strerror (errno)); return FALSE; } if (setsockopt(tsocket->sd, SOL_SOCKET, SO_REUSEADDR, &enabled, sizeof(enabled)) == -1) { g_set_error (error, THRIFT_SERVER_SOCKET_ERROR, THRIFT_SERVER_SOCKET_ERROR_SETSOCKOPT, "unable to set SO_REUSEADDR - %s", strerror(errno)); return FALSE; // -----------> socket leak. } ...... -- This message was sent by Atlassian Jira (v8.3.4#803005)