struct server_connection *conn;
/* accept an incoming connection. */
- status = socket_accept(server_socket->socket, &sock, 0);
+ status = socket_accept(server_socket->socket, &sock);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("accept_connection_single: accept: %s\n",
nt_errstr(status)));
main event_context is continued.
*/
- ev = event_context_init();
+ ev = event_context_init(server_socket);
if (!ev) {
DEBUG(0,("thread_accept_connection: failed to create event_context!\n"));
socket_destroy(sock);
return;
}
- conn = server_setup_connection(ev, server_socket, sock, t);
+ conn = server_setup_connection(ev, server_socket, sock, t, pthread_self());
if (!conn) {
DEBUG(0,("server_setup_connection(ev, server_socket, sock, t) failed\n"));
event_context_destroy(ev);
return;
}
+ talloc_steal(conn, ev);
talloc_steal(conn, sock);
/* TODO: is this MUTEX_LOCK in the right place here?
DEBUG(0,("thread_terminate_connection: reason[%s]\n",reason));
if (conn) {
- if (conn->service) {
- conn->service->ops->close_connection(conn,reason);
- }
-
- if (conn->server_socket) {
- MUTEX_LOCK_BY_ID(MUTEX_SMBD);
- DLIST_REMOVE(conn->server_socket->connection_list,conn);
- MUTEX_UNLOCK_BY_ID(MUTEX_SMBD);
- }
-
- server_destroy_connection(conn);
+ talloc_free(conn);
}
/* terminate this thread */