improvements to the Windows-side of thread handling
diff --git a/threads.c b/threads.c
index 07a1469..505133e 100644
--- a/threads.c
+++ b/threads.c
@@ -27,9 +27,10 @@
 #ifdef HAVE_PTHREAD_H
 #include <pthread.h>
 #endif
+
 #ifdef HAVE_WIN32_THREADS
 #include <windows.h>
-#ifndef _MSC_VER
+#ifndef HAVE_COMPILER_TLS
 #include <process.h>
 #endif
 #endif
@@ -53,7 +54,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_t lock;
 #elif defined HAVE_WIN32_THREADS
-	HANDLE mutex;
+    HANDLE mutex;
 #else
     int empty;
 #endif
@@ -70,8 +71,8 @@
     pthread_t       tid;
     pthread_cond_t  cv;
 #elif defined HAVE_WIN32_THREADS
-	CRITICAL_SECTION cs;
-	unsigned int count;
+    CRITICAL_SECTION cs;
+    unsigned int count;
 #else
     int empty;
 #endif
@@ -87,15 +88,16 @@
 static pthread_t	mainthread;
 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
 #elif defined HAVE_WIN32_THREADS
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-static __declspec (thread) xmlGlobalState tlstate;
-static __declspec (thread) int tlstate_inited = 0;
-#else
+#if defined(HAVE_COMPILER_TLS)
+static __declspec(thread) xmlGlobalState tlstate;
+static __declspec(thread) int tlstate_inited = 0;
+#else /* HAVE_COMPILER_TLS */
 static DWORD globalkey;
-#endif /* _MSC_VER */
+#endif /* HAVE_COMPILER_TLS */
 static DWORD mainthread;
 static int run_once_init = 1;
 #endif /* HAVE_WIN32_THREADS */
+
 static xmlRMutexPtr	xmlLibraryLock = NULL;
 static void xmlOnceInit(void);
 
@@ -117,7 +119,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_init(&tok->lock, NULL);
 #elif defined HAVE_WIN32_THREADS
-	tok->mutex = CreateMutex (NULL, FALSE, NULL);
+    tok->mutex = CreateMutex(NULL, FALSE, NULL);
 #endif
     return (tok);
 }
@@ -135,7 +137,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_destroy(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	CloseHandle (tok->mutex);
+    CloseHandle(tok->mutex);
 #endif
     free(tok);
 }
@@ -152,7 +154,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_lock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	WaitForSingleObject (tok->mutex, INFINITE);
+    WaitForSingleObject(tok->mutex, INFINITE);
 #endif
 
 }
@@ -169,7 +171,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	ReleaseMutex (tok->mutex);
+    ReleaseMutex(tok->mutex);
 #endif
 }
 
@@ -195,8 +197,8 @@
     tok->held = 0;
     tok->waiters = 0;
 #elif defined HAVE_WIN32_THREADS
-	InitializeCriticalSection (&tok->cs);
-	tok->count = 0;
+    InitializeCriticalSection(&tok->cs);
+    tok->count = 0;
 #endif
     return (tok);
 }
@@ -214,7 +216,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_destroy(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	DeleteCriticalSection (&tok->cs);
+    DeleteCriticalSection(&tok->cs);
 #endif
     free(tok);
 }
@@ -246,8 +248,8 @@
     tok->held = 1;
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	EnterCriticalSection (&tok->cs);
-	++tok->count;
+    EnterCriticalSection(&tok->cs);
+    ++tok->count;
 #endif
 }
 
@@ -270,7 +272,8 @@
     }
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	if (!--tok->count) LeaveCriticalSection (&tok->cs);
+    if (!--tok->count) 
+	LeaveCriticalSection(&tok->cs);
 #endif
 }
 
@@ -281,7 +284,6 @@
  ************************************************************************/
 
 #ifdef LIBXML_THREAD_ENABLED
-#ifndef _MSC_VER
 /**
  * xmlFreeGlobalState:
  * @state:  a thread global state
@@ -317,7 +319,6 @@
     xmlInitializeGlobalState(gs);
     return (gs);
 }
-#endif /* _MSC_VER */
 #endif /* LIBXML_THREAD_ENABLED */
 
 
@@ -330,23 +331,23 @@
  */
 
 #ifdef HAVE_WIN32_THREADS
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
+#if !defined(HAVE_COMPILER_TLS)
 typedef struct _xmlGlobalStateCleanupHelperParams
 {
-	HANDLE thread;
-	void *memory;
+    HANDLE thread;
+    void *memory;
 } xmlGlobalStateCleanupHelperParams;
 
-void __cdecl xmlGlobalStateCleanupHelper (void *p)
+void xmlGlobalStateCleanupHelper (void *p)
 {
-	xmlGlobalStateCleanupHelperParams *params = (xmlGlobalStateCleanupHelperParams *) p;
-	WaitForSingleObject (params->thread, INFINITE);
-	CloseHandle (params->thread);
-	xmlFreeGlobalState (params->memory);
-	free (params);
-	_endthread ();
+    xmlGlobalStateCleanupHelperParams *params = (xmlGlobalStateCleanupHelperParams *) p;
+    WaitForSingleObject(params->thread, INFINITE);
+    CloseHandle(params->thread);
+    xmlFreeGlobalState(params->memory);
+    free(params);
+    _endthread();
 }
-#endif /* _MSC_VER */
+#endif /* HAVE_COMPILER_TLS */
 #endif /* HAVE_WIN32_THREADS */
 
 xmlGlobalStatePtr
@@ -358,7 +359,7 @@
     pthread_once(&once_control, xmlOnceInit);
 
     if ((globalval = (xmlGlobalState *)
-         pthread_getspecific(globalkey)) == NULL) {
+		pthread_getspecific(globalkey)) == NULL) {
         xmlGlobalState *tsd = xmlNewGlobalState();
 
         pthread_setspecific(globalkey, tsd);
@@ -366,34 +367,33 @@
     }
     return (globalval);
 #elif defined HAVE_WIN32_THREADS
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-	if (!tlstate_inited)
-	{
-		tlstate_inited = 1;
-		xmlInitializeGlobalState (&tlstate);
-	}
+#if defined(HAVE_COMPILER_TLS)
+    if (!tlstate_inited) {
+	tlstate_inited = 1;
+	xmlInitializeGlobalState(&tlstate);
+    }
+    return &tlstate;
+#else /* HAVE_COMPILER_TLS */
+    xmlGlobalState *globalval;
 
-	return &tlstate;
-#else /* !_MSC_VER */
-	xmlGlobalState *globalval;
+    if (run_once_init) { 
+	run_once_init = 0; 
+	xmlOnceInit(); 
+    }
+    if ((globalval = (xmlGlobalState *) TlsGetValue(globalkey)) == NULL) {
+	xmlGlobalState *tsd = xmlNewGlobalState();
+	xmlGlobalStateCleanupHelperParams *p = 
+	    (xmlGlobalStateCleanupHelperParams *) malloc(sizeof(xmlGlobalStateCleanupHelperParams));
+	p->memory = tsd;
+	DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), 
+		GetCurrentProcess(), &p->thread, 0, TRUE, DUPLICATE_SAME_ACCESS);
+	TlsSetValue(globalkey, tsd);
+	_beginthread(xmlGlobalStateCleanupHelper, 0, p);
 
-	if (run_once_init) { run_once_init = 0; xmlOnceInit (); }
-
-	if ((globalval = (xmlGlobalState *) TlsGetValue (globalkey)) == NULL)
-	{
-		xmlGlobalState *tsd = xmlNewGlobalState();
-		xmlGlobalStateCleanupHelperParams *p = (xmlGlobalStateCleanupHelperParams *) malloc (sizeof (xmlGlobalStateCleanupHelperParams));
-
-		p->memory = tsd;
-		DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), GetCurrentProcess (), &p->thread, 0, TRUE, DUPLICATE_SAME_ACCESS);
-
-		TlsSetValue (globalkey, tsd);
-		_beginthread (xmlGlobalStateCleanupHelper, 0, p);
-
-		return (tsd);
-	}
-	return (globalval);
-#endif /* _MSC_VER */
+	return (tsd);
+    }
+    return (globalval);
+#endif /* HAVE_COMPILER_TLS */
 #else
     return(NULL);
 #endif
@@ -418,7 +418,7 @@
 #ifdef HAVE_PTHREAD_H
     return((int) pthread_self());
 #elif defined HAVE_WIN32_THREADS
-	return GetCurrentThreadId ();
+    return GetCurrentThreadId();
 #else
     return((int) 0);
 #endif
@@ -437,7 +437,10 @@
 #ifdef HAVE_PTHREAD_H
     pthread_once(&once_control, xmlOnceInit);
 #elif defined HAVE_WIN32_THREADS
-	if (run_once_init) { run_once_init = 0; xmlOnceInit (); }
+    if (run_once_init) { 
+	run_once_init = 0; 
+	xmlOnceInit (); 
+    }
 #endif
         
 #ifdef DEBUG_THREADS
@@ -446,7 +449,7 @@
 #ifdef HAVE_PTHREAD_H
     return(mainthread == pthread_self());
 #elif defined HAVE_WIN32_THREADS
-	return (mainthread == GetCurrentThreadId ());
+    return(mainthread == GetCurrentThreadId ());
 #else
     return(1);
 #endif
@@ -522,12 +525,14 @@
 static void
 xmlOnceInit(void) {
 #ifdef HAVE_PTHREAD_H
-   (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
+    (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
     mainthread = pthread_self();
-#elif defined HAVE_WIN32_THREADS
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
-	globalkey = TlsAlloc ();
-#endif /* _MSC_VER */
-	mainthread = GetCurrentThreadId ();
+#endif
+
+#if defined(HAVE_WIN32_THREADS)
+#if !defined(HAVE_COMPILER_TLS)
+    globalkey = TlsAlloc();
+#endif
+    mainthread = GetCurrentThreadId();
 #endif
 }