THRIFT-5399: Fix socket leak in abnormal situation
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 @@
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_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_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_ERROR_BIND,
"failed to listen to path %s: - %s",
tsocket->path, strerror(errno));
- return FALSE;
}
else
{
@@ -128,8 +133,10 @@
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;