--- a/ptw32_processTerminate.c
+++ b/ptw32_processTerminate.c
@@ -65,6 +65,7 @@
   if (ptw32_processInitialized)
     {
       ptw32_thread_t * tp, * tpNext;
+      ptw32_mcs_local_node_t node;
 
       if (ptw32_selfThreadKey != NULL)
 	{
@@ -86,7 +87,7 @@
 	  ptw32_cleanupKey = NULL;
 	}
 
-      EnterCriticalSection (&ptw32_thread_reuse_lock);
+      ptw32_mcs_lock_acquire(&ptw32_thread_reuse_lock, &node);
 
       tp = ptw32_threadReuseTop;
       while (tp != PTW32_THREAD_REUSE_EMPTY)
@@ -96,17 +97,7 @@
 	  tp = tpNext;
 	}
 
-      LeaveCriticalSection (&ptw32_thread_reuse_lock);
-
-      /* 
-       * Destroy the global locks and other objects.
-       */
-      DeleteCriticalSection (&ptw32_spinlock_test_init_lock);
-      DeleteCriticalSection (&ptw32_rwlock_test_init_lock);
-      DeleteCriticalSection (&ptw32_cond_test_init_lock);
-      DeleteCriticalSection (&ptw32_cond_list_lock);
-      DeleteCriticalSection (&ptw32_mutex_test_init_lock);
-      DeleteCriticalSection (&ptw32_thread_reuse_lock);
+      ptw32_mcs_lock_release(&node);
 
       ptw32_processInitialized = PTW32_FALSE;
     }