Merged silc_1_0_branch to trunk.
[silc.git] / lib / silcutil / silcsockconn.c
index 3ae1a1e8e0dbec5053f5dc2de51de5434ec9ad82..a49422487a0329c1262989edbe2ff790fce95248 100644 (file)
@@ -103,6 +103,10 @@ SILC_TASK_CALLBACK(silc_socket_heartbeat)
   if (!hb->heartbeat)
     return;
 
+  if (SILC_IS_DISCONNECTING(hb->sock) ||
+      SILC_IS_DISCONNECTED(hb->sock))
+    return;
+
   if (hb->hb_callback)
     hb->hb_callback(hb->sock, hb->hb_context);
 
@@ -192,8 +196,8 @@ SILC_TASK_CALLBACK(silc_socket_host_lookup_finish)
      is cancelled also and we will not call the final callback. */
   if (lookup->sock->users == 1) {
     SILC_LOG_DEBUG(("Async host lookup was cancelled"));
-    silc_free(lookup);
     silc_socket_free(lookup->sock);
+    silc_free(lookup);
     return;
   }
 
@@ -250,6 +254,10 @@ void silc_socket_host_lookup(SilcSocketConnection sock,
 
   SILC_LOG_DEBUG(("Performing async host lookup"));
 
+  if (SILC_IS_DISCONNECTING(sock) ||
+      SILC_IS_DISCONNECTED(sock))
+    return;
+
   lookup = silc_calloc(1, sizeof(*lookup));
   lookup->sock = silc_socket_dup(sock);        /* Increase reference counter */
   lookup->callback = callback;