smbd:smb2_server: let smbd_server_connection_terminate() only call exit_server()...
authorStefan Metzmacher <metze@samba.org>
Thu, 18 Sep 2014 17:27:42 +0000 (19:27 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 26 Jan 2016 14:58:11 +0000 (15:58 +0100)
TODO: We need to cancel pending requests on the connection and defer the
talloc_free.

Currently we only ever have one connection.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Michael Adam <obnox@samba.org>
source3/smbd/smb2_server.c

index 9adbb99606795a9311460fd1b963d6cbf373fed5..58f933b3c0031c2744e7af96c731a022fbea7d48 100644 (file)
@@ -1059,8 +1059,21 @@ void smbd_server_connection_terminate_ex(struct smbXsrv_connection *xconn,
                                         const char *reason,
                                         const char *location)
 {
-       DEBUG(10,("smbd_server_connection_terminate_ex: reason[%s] at %s\n",
-                 reason, location));
+       struct smbXsrv_client *client = xconn->client;
+
+       DEBUG(10,("smbd_server_connection_terminate_ex: conn[%s] reason[%s] at %s\n",
+                 smbXsrv_connection_dbg(xconn), reason, location));
+
+       if (client->connections->next != NULL) {
+               /* TODO: cancel pending requests */
+               DLIST_REMOVE(client->connections, xconn);
+               TALLOC_FREE(xconn);
+               return;
+       }
+
+       /*
+        * The last connection was disconnected
+        */
        exit_server_cleanly(reason);
 }