The silc_client_connect_to_[server|client] and
[silc.git] / lib / silcclient / README
index 66a14e7d072148aa85b4744ca57376063a251623..dc0fcae7f11ff08cef98733ad8e077f942478266 100644 (file)
@@ -76,3 +76,26 @@ When to use FSM semaphore signalling?
 
    The call cannot fail.  Semaphores need not be uninitialized and the same
    context may be reused.
 
    The call cannot fail.  Semaphores need not be uninitialized and the same
    context may be reused.
+
+Finishing threads when closing connection
+
+   When closing SilcClientConnection all threads must first be finished
+   before the connection machine is finished.  This is done by finishing
+   all running command threads.  That will also finish all waiting packet
+   threads as they are always waiting for a command.  If any thread is
+   waiting for something else than a command (such as event threads) they
+   must be explicitly finished.  The threads are finished by continuing
+   them synchronously.  The threads will detect that we are disconnected
+   (see below).  SILC_FSM_YIELD must be returned in st_close() as that
+   gives the FSM scheduler time to finish the threads first.  After that
+   the machine can be finished.
+
+   Also, any thread that runs in SilcClientConnection machine must always
+   after returning from wait state to check if we are disconnected by doing
+
+     if (conn->internal->disconnected)
+       xxx;
+
+   If disconnected the thread must finish immediately by returning
+   SILC_FSM_FINISH.
+