Fixed TCP stream creation aborting.
[silc.git] / apps / irssi / src / silc / core / silc-servers.c
index 38ea4f487addd8d4aa504621f8ab37caf35cbe1c..748c2649ecb64878e896fddd9c17cfed312a5088 100644 (file)
@@ -396,6 +396,7 @@ static void sig_connected_stream_created(SilcSocketStreamStatus status,
   SilcClientConnectionParams params;
   char *file;
 
+  server->tcp_op = NULL;
   if (!stream) {
     server->connection_lost = TRUE;
     server_disconnect(SERVER(server));
@@ -423,6 +424,7 @@ static void sig_connected_stream_created(SilcSocketStreamStatus status,
   if (params.detach_data)
     printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
                        SILCTXT_REATTACH, server->tag);
+  silc_free(file);
 
   /* Start key exchange */
   server->op = silc_client_key_exchange(silc_client, &params,
@@ -453,8 +455,10 @@ static void sig_connected(SILC_SERVER_REC *server)
 
   /* Wrap the socket to TCP stream */
   fd = g_io_channel_unix_get_fd(net_sendbuffer_handle(server->handle));
-  silc_socket_tcp_stream_create(fd, TRUE, FALSE, silc_client->schedule,
-                               sig_connected_stream_created, server);
+  server->tcp_op =
+    silc_socket_tcp_stream_create(fd, TRUE, FALSE, 
+                                 silc_client->schedule,
+                                 sig_connected_stream_created, server);
 }
 
 static void sig_disconnected(SILC_SERVER_REC *server)
@@ -471,6 +475,10 @@ static void sig_disconnected(SILC_SERVER_REC *server)
     /* Abort on going connecting (key exchange) */
     silc_async_abort(server->op, NULL, NULL);
     server->op = NULL;
+  } else if (server->tcp_op) {
+    /* Abort on going TCP stream creation */
+    silc_async_abort(server->tcp_op, NULL, NULL);
+    server->tcp_op = NULL;
   }
 
   /* SILC closes the handle */