r3314: added a option "socket:testnonblock" to the generic socket code. If
[bbaumbach/samba-autobuild/.git] / source4 / smbd / process_thread.c
index 4e11137f37ca89e422988e031403f6981bdc11e3..2b8746efb2ecef32bdfcce51e038d1b67675d04c 100644 (file)
@@ -58,7 +58,7 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event *
        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)));
@@ -72,14 +72,14 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event *
           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);
@@ -87,6 +87,7 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event *
                return;
        }
 
+       talloc_steal(conn, ev);
        talloc_steal(conn, sock);
 
        /* TODO: is this MUTEX_LOCK in the right place here?
@@ -117,17 +118,7 @@ static void thread_terminate_connection(struct server_connection *conn, const ch
        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 */