Moved net connecetion closing to the finalizing callback.
authorPekka Riikonen <priikone@silcnet.org>
Tue, 10 Jun 2003 10:21:26 +0000 (10:21 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Tue, 10 Jun 2003 10:21:26 +0000 (10:21 +0000)
apps/silcd/server.c

index dfed667e15cf68092545c6ce351c50c064ea9f5d..8f9dc999843e7e9233021930d683309491f801f5 100644 (file)
@@ -2921,7 +2921,17 @@ void silc_server_create_connection(SilcServer server,
 
 SILC_TASK_CALLBACK(silc_server_close_connection_final)
 {
-  silc_socket_free(context);
+  SilcServer server = app_context;
+  SilcSocketConnection sock = context;
+
+  /* Close the actual connection */
+  silc_net_close_connection(sock->sock);
+
+  /* We won't listen for this connection anymore */
+  silc_schedule_task_del_by_fd(server->schedule, sock->sock);
+  silc_schedule_unset_listen_fd(server->schedule, sock->sock);
+
+  silc_socket_free(sock);
 }
 
 /* Closes connection to socket connection */
@@ -2932,9 +2942,6 @@ void silc_server_close_connection(SilcServer server,
   char tmp[128];
 
   if (!server->sockets[sock->sock] && SILC_IS_DISCONNECTED(sock)) {
-    silc_schedule_unset_listen_fd(server->schedule, sock->sock);
-    silc_schedule_task_del_by_fd(server->schedule, sock->sock);
-    silc_net_close_connection(sock->sock);
     silc_schedule_task_add(server->schedule, sock->sock,
                           silc_server_close_connection_final,
                           (void *)sock, 0, 1, SILC_TASK_TIMEOUT,
@@ -2973,12 +2980,6 @@ void silc_server_close_connection(SilcServer server,
     }
   }
 
-  /* Close the actual connection */
-  silc_net_close_connection(sock->sock);
-
-  /* We won't listen for this connection anymore */
-  silc_schedule_unset_listen_fd(server->schedule, sock->sock);
-
   silc_schedule_task_add(server->schedule, sock->sock,
                         silc_server_close_connection_final,
                         (void *)sock, 0, 1, SILC_TASK_TIMEOUT,