Do not uninitialize u.m.thread atomic in in finish but in free.
[silc.git] / lib / silcutil / silcfsm.c
index 5139c0cd7f7be2f2c0f7b45f1e76dd1d7752da8d..f22540cd0af5ea2800a1127e56a3b9cb5e57edbb 100644 (file)
@@ -151,6 +151,9 @@ SILC_TASK_CALLBACK(silc_fsm_free_final)
   if (f->thread && f->u.t.event)
     silc_fsm_event_free(f->u.t.event);
 
+  if (!f->thread)
+    silc_atomic_uninit32(&f->u.m.threads);
+
   silc_free(f);
 }
 
@@ -485,7 +488,6 @@ SILC_TASK_CALLBACK(silc_fsm_finish_fsm)
       silc_mutex_free(fsm->u.m.lock);
       fsm->u.m.lock = NULL;
     }
-    silc_atomic_uninit32(&fsm->u.m.threads);
 
     /* Call the destructor callback. */
     if (fsm->destructor)