[ignore] struct smbXsrv_connection *connections;
boolean8 server_multi_channel_enabled;
hyper next_channel_id;
+ [ignore] struct tevent_req *connection_pass_subreq;
/*
* A List of pending breaks.
}
if (client != NULL) {
+ NTSTATUS status;
+
sconn = client->sconn;
xconn = client->connections;
- }
+ /*
+ * Make sure we stop handling new multichannel
+ * connections early!
+ *
+ * From here, we're not able to handle them.
+ */
+ status = smbXsrv_client_remove(client);
+ if (!NT_STATUS_IS_OK(status)) {
+ D_ERR("Server exit (%s)\n",
+ (reason ? reason : "normal exit"));
+ DBG_ERR("smbXsrv_client_remove() failed (%s)\n",
+ nt_errstr(status));
+ }
+ }
change_to_root_user();
return NT_STATUS_NO_MEMORY;
}
tevent_req_set_callback(subreq, smbXsrv_client_connection_pass_loop, client);
+ client->connection_pass_subreq = subreq;
*_client = client;
return NT_STATUS_OK;
int sock_fd = -1;
uint64_t seq_low;
+ client->connection_pass_subreq = NULL;
+
ret = messaging_filtered_read_recv(subreq, talloc_tos(), &rec);
TALLOC_FREE(subreq);
if (ret != 0) {
return;
}
tevent_req_set_callback(subreq, smbXsrv_client_connection_pass_loop, client);
+ client->connection_pass_subreq = subreq;
}
NTSTATUS smbXsrv_client_update(struct smbXsrv_client *client)
return NT_STATUS_OK;
}
+ TALLOC_FREE(client->connection_pass_subreq);
+
client->global->db_rec = smbXsrv_client_global_fetch_locked(
table->global.db_ctx,
&client->global->client_guid,