+static UBool gMutexPoolInitialized = FALSE;
+static char gMutexesInUse[MAX_MUTEXES];
+
+#if defined(WIN32)
+/*-------------------------------------------------------------
+ *
+ * WINDOWS platform variable declarations
+ *
+ *-------------------------------------------------------------*/
+static CRITICAL_SECTION gMutexes[MAX_MUTEXES];
+static CRITICAL_SECTION gGlobalWinMutex;
+
+
+/* On WIN32 mutexes are reentrant. This makes it difficult to debug
+ * deadlocking problems that show up on POSIXy platforms, where
+ * mutexes deadlock upon reentry. ICU contains checking code for
+ * the global mutex as well as for other mutexes in the pool.
+ *
+ * This is for debugging purposes.
+ *
+ * This has no effect on non-WIN32 platforms, non-DEBUG builds, and
+ * non-ICU_USE_THREADS builds.
+ *
+ * Note: The CRITICAL_SECTION structure already has a RecursionCount
+ * member that can be used for this purpose, but portability to
+ * Win98/NT/2K needs to be tested before use. Works fine on XP.
+ * After portability is confirmed, the built-in RecursionCount can be
+ * used, and the gRecursionCountPool can be removed.
+ *
+ * Note: Non-global mutex checking only happens if there is no custom
+ * pMutexLockFn defined. Use one function, not two (don't use
+ * pMutexLockFn and pMutexUnlockFn) so the increment and decrement of
+ * the recursion count don't get out of sync. Users might set just
+ * one function, e.g., to perform a custom action, followed by a
+ * standard call to EnterCriticalSection.
+ */
+#if defined(U_DEBUG) && (ICU_USE_THREADS==1)
+static int32_t gRecursionCount = 0; /* detect global mutex locking */
+static int32_t gRecursionCountPool[MAX_MUTEXES]; /* ditto for non-global */
+#endif