More client library rewrites (key agreement, plus other).
[silc.git] / lib / silcclient / client_register.c
index 84f35f72cb6c9973311cf4ca56b0d1065732edd9..b0ddc907d61b0eab2ebf1c6a2cfbe1c872dafaea 100644 (file)
@@ -213,6 +213,8 @@ SILC_FSM_STATE(silc_client_st_register_complete)
                 conn->callback_context);
 
   conn->internal->registering = FALSE;
+  silc_schedule_task_del_by_context(conn->internal->schedule, conn);
+
   return SILC_FSM_FINISH;
 }
 
@@ -226,13 +228,17 @@ SILC_FSM_STATE(silc_client_st_register_error)
   SILC_LOG_DEBUG(("Error registering to network"));
 
   /* Signal to close connection */
-  conn->internal->disconnected = TRUE;
-  SILC_FSM_SEMA_POST(&conn->internal->wait_event);
+  if (!conn->internal->disconnected) {
+    conn->internal->disconnected = TRUE;
+    SILC_FSM_SEMA_POST(&conn->internal->wait_event);
+  }
 
   /* Call connect callback */
   conn->callback(client, conn, SILC_CLIENT_CONN_ERROR, 0, NULL,
                 conn->callback_context);
 
+  silc_schedule_task_del_by_context(conn->internal->schedule, conn);
+
   return SILC_FSM_FINISH;
 }