Allocate DebugInfo field for all critical sections (based on a patch
by Alex Pasadyn).
Get rid of the Wine-specific CRITICAL_SECTION_INIT macro.

diff --git a/windows/cursoricon.c b/windows/cursoricon.c
index a43de9f..261a247 100644
--- a/windows/cursoricon.c
+++ b/windows/cursoricon.c
@@ -93,7 +93,16 @@
 } ICONCACHE;
 
 static ICONCACHE *IconAnchor = NULL;
-static CRITICAL_SECTION IconCrst = CRITICAL_SECTION_INIT("IconCrst");
+
+static CRITICAL_SECTION IconCrst;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &IconCrst,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+      0, 0, { 0, (DWORD)(__FILE__ ": IconCrst") }
+};
+static CRITICAL_SECTION IconCrst = { &critsect_debug, -1, 0, 0, 0, 0 };
+
 static WORD ICON_HOTSPOT = 0x4242;
 
 
diff --git a/windows/timer.c b/windows/timer.c
index 234ed29..ede3134 100644
--- a/windows/timer.c
+++ b/windows/timer.c
@@ -50,7 +50,14 @@
 
 static TIMER TimersArray[NB_TIMERS];
 
-static CRITICAL_SECTION csTimer = CRITICAL_SECTION_INIT("csTimer");
+static CRITICAL_SECTION csTimer;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &csTimer,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+      0, 0, { 0, (DWORD)(__FILE__ ": csTimer") }
+};
+static CRITICAL_SECTION csTimer = { &critsect_debug, -1, 0, 0, 0, 0 };
 
 
 /***********************************************************************
diff --git a/windows/user.c b/windows/user.c
index 194233e..d108aa4 100644
--- a/windows/user.c
+++ b/windows/user.c
@@ -42,8 +42,14 @@
 WINE_DECLARE_DEBUG_CHANNEL(win);
 WINE_DECLARE_DEBUG_CHANNEL(win32);
 
-SYSLEVEL USER_SysLevel = { CRITICAL_SECTION_INIT("USER_SysLevel"), 2 };
-
+static SYSLEVEL USER_SysLevel;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &USER_SysLevel.crst,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+      0, 0, { 0, (DWORD)(__FILE__ ": USER_SysLevel") }
+};
+static SYSLEVEL USER_SysLevel = { { &critsect_debug, -1, 0, 0, 0, 0 }, 2 };
 
 /* USER signal proc flags and codes */
 /* See UserSignalProc for comments */
@@ -152,6 +158,36 @@
 
 
 /***********************************************************************
+ *           WIN_SuspendWndsLock
+ *
+ * Suspend the lock on WND structures.
+ * Returns the number of locks suspended
+ * FIXME: should be removed
+ */
+int WIN_SuspendWndsLock( void )
+{
+    int isuspendedLocks = _ConfirmSysLevel( &USER_SysLevel );
+    int count = isuspendedLocks;
+
+    while ( count-- > 0 )
+        _LeaveSysLevel( &USER_SysLevel );
+
+    return isuspendedLocks;
+}
+
+/***********************************************************************
+ *           WIN_RestoreWndsLock
+ *
+ * Restore the suspended locks on WND structures
+ * FIXME: should be removed
+ */
+void WIN_RestoreWndsLock( int ipreviousLocks )
+{
+    while ( ipreviousLocks-- > 0 )
+        _EnterSysLevel( &USER_SysLevel );
+}
+
+/***********************************************************************
  *		FinalUserInit (USER.400)
  */
 void WINAPI FinalUserInit16( void )
diff --git a/windows/win.c b/windows/win.c
index 704d8e2..6abf4a9 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -56,37 +56,6 @@
 
 static void *user_handles[NB_USER_HANDLES];
 
-/* thread safeness */
-extern SYSLEVEL USER_SysLevel;  /* FIXME */
-
-/***********************************************************************
- *           WIN_SuspendWndsLock
- *
- *   Suspend the lock on WND structures.
- *   Returns the number of locks suspended
- */
-int WIN_SuspendWndsLock( void )
-{
-    int isuspendedLocks = _ConfirmSysLevel( &USER_SysLevel );
-    int count = isuspendedLocks;
-
-    while ( count-- > 0 )
-        _LeaveSysLevel( &USER_SysLevel );
-
-    return isuspendedLocks;
-}
-
-/***********************************************************************
- *           WIN_RestoreWndsLock
- *
- *  Restore the suspended locks on WND structures
- */
-void WIN_RestoreWndsLock( int ipreviousLocks )
-{
-    while ( ipreviousLocks-- > 0 )
-        _EnterSysLevel( &USER_SysLevel );
-}
-
 /***********************************************************************
  *           create_window_handle
  *
diff --git a/windows/winproc.c b/windows/winproc.c
index 87bb690..b446b55 100644
--- a/windows/winproc.c
+++ b/windows/winproc.c
@@ -114,7 +114,15 @@
 static WINDOWPROC winproc_array[MAX_WINPROCS];
 static WINDOWPROC *winproc_first_free;
 static UINT winproc_used;
-static CRITICAL_SECTION winproc_cs = CRITICAL_SECTION_INIT("winproc_cs");
+
+static CRITICAL_SECTION winproc_cs;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &winproc_cs,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+      0, 0, { 0, (DWORD)(__FILE__ ": winproc_cs") }
+};
+static CRITICAL_SECTION winproc_cs = { &critsect_debug, -1, 0, 0, 0, 0 };
 
 /* allocate a window procedure from the global array */
 static WINDOWPROC *alloc_winproc(void)