Prevent continuing of an already finished FSM.
[silc.git] / lib / silcske / silcske.c
index 9cb98f71b5929085d2b0a2a394baabb6b00c51b6..1987ffc279f737dcb91d2ee65f1ff4df4941dec2 100644 (file)
@@ -968,6 +968,7 @@ static void silc_ske_finished(SilcFSM fsm, void *fsm_context,
                              void *destructor_context)
 {
   SilcSKE ske = fsm_context;
+  ske->fsm_finished = TRUE;
     silc_ske_free(ske);
 }
 
@@ -1046,7 +1047,10 @@ void silc_ske_free(SilcSKE ske)
 
       silc_ske_notify_failure(ske);
 
-      silc_fsm_continue_sync(&ske->fsm);
+      if (!ske->fsm_finished)
+         silc_fsm_continue_sync(&ske->fsm);
+      else
+         SILC_LOG_DEBUG(("Not continuing FSM as it's finished for SKE %p", ske));
     }
 
   ske->refcnt--;