/*
- * $Id: debug.cc,v 1.98 2006/05/08 23:38:33 robertc Exp $
+ * $Id: debug.cc,v 1.99 2006/08/28 10:11:10 serassio Exp $
*
* DEBUG: section 0 Debug Routines
* AUTHOR: Harvest Derived
static void _db_print_stderr(const char *format, va_list args);
static void _db_print_file(const char *format, va_list args);
+#ifdef _SQUID_MSWIN_
+SQUIDCEXTERN LPCRITICAL_SECTION dbg_mutex;
+typedef BOOL (WINAPI * PFInitializeCriticalSectionAndSpinCount) (LPCRITICAL_SECTION, DWORD);
+
+#endif
+
void
#if STDC_HEADERS
_db_print(const char *format,...)
#else
#define args2 args1
#define args3 args1
+#endif
+#ifdef _SQUID_MSWIN_
+ /* Multiple WIN32 threads may call this simultaneously */
+
+ if (!dbg_mutex)
+ {
+ HMODULE krnl_lib = GetModuleHandle("Kernel32");
+ PFInitializeCriticalSectionAndSpinCount InitializeCriticalSectionAndSpinCount = NULL;
+
+ if (krnl_lib)
+ InitializeCriticalSectionAndSpinCount =
+ (PFInitializeCriticalSectionAndSpinCount) GetProcAddress(krnl_lib,
+ "InitializeCriticalSectionAndSpinCount");
+
+ dbg_mutex = static_cast<CRITICAL_SECTION*>(xcalloc(1, sizeof(CRITICAL_SECTION)));
+
+ if (InitializeCriticalSectionAndSpinCount) {
+ /* let multiprocessor systems EnterCriticalSection() fast */
+
+ if (!InitializeCriticalSectionAndSpinCount(dbg_mutex, 4000)) {
+ if (debug_log) {
+ fprintf(debug_log, "FATAL: _db_print: can't initialize critical section\n");
+ fflush(debug_log);
+ }
+
+ fprintf(stderr, "FATAL: _db_print: can't initialize critical section\n");
+ abort();
+ } else
+ InitializeCriticalSection(dbg_mutex);
+ }
+ }
+
+ EnterCriticalSection(dbg_mutex);
#endif
/* give a chance to context-based debugging to print current context */
_db_print_syslog(format, args3);
+#endif
+#ifdef _SQUID_MSWIN_
+
+ LeaveCriticalSection(dbg_mutex);
+
#endif
va_end(args1);
/*
- * $Id: win32.cc,v 1.19 2006/04/29 13:53:16 serassio Exp $
+ * $Id: win32.cc,v 1.20 2006/08/28 10:11:10 serassio Exp $
*
* * * * * * * * Legal stuff * * * * * * *
*
#endif
static int Win32SockInit(void);
static void Win32SockCleanup(void);
+SQUIDCEXTERN LPCRITICAL_SECTION dbg_mutex;
void WIN32_ExceptionHandlerCleanup(void);
static LPTOP_LEVEL_EXCEPTION_FILTER Win32_Old_ExceptionHandler = NULL;
static int s_iInitCount = 0;
#endif
#ifdef _SQUID_MSWIN_
+ if (dbg_mutex)
+ DeleteCriticalSection(dbg_mutex);
+
WIN32_ExceptionHandlerCleanup();
#endif