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;