summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/server/image.c2
-rw-r--r--src/server/uplink.c1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/server/image.c b/src/server/image.c
index d8c7113..d20a149 100644
--- a/src/server/image.c
+++ b/src/server/image.c
@@ -943,7 +943,7 @@ dnbd3_image_t* image_getOrClone(char *name, uint16_t revision)
image = image_get( name, remoteRid, false );
if ( image != NULL && uplinkSock != -1 && uplinkServer != NULL ) {
// If so, init the uplink and pass it the socket
- uplink_init( image, uplinkSock, uplinkServer );
+ if ( !uplink_init( image, uplinkSock, uplinkServer ) ) close( uplinkSock );
i = 0;
while ( !image->working && ++i < 100 )
usleep( 1000 );
diff --git a/src/server/uplink.c b/src/server/uplink.c
index fdc4b27..dea0298 100644
--- a/src/server/uplink.c
+++ b/src/server/uplink.c
@@ -44,6 +44,7 @@ bool uplink_init(dnbd3_image_t *image, int sock, dnbd3_host_t *host)
spin_lock( &image->lock );
if ( image->uplink != NULL ) {
spin_unlock( &image->lock );
+ if ( sock >= 0 ) close( sock );
return true; // There's already an uplink, so should we consider this success or failure?
}
if ( image->cache_map == NULL ) {