diff --git a/event_iocp.c b/event_iocp.c index 0dd4e904..87ac85dd 100644 --- a/event_iocp.c +++ b/event_iocp.c @@ -193,7 +193,7 @@ event_iocp_port_launch(void) ++port->n_live_threads; } - InitializeCriticalSection(&port->lock); + InitializeCriticalSectionAndSpinCount(&port->lock, 1000); return port; err: diff --git a/evthread_win32.c b/evthread_win32.c index 995e0e15..655cff83 100644 --- a/evthread_win32.c +++ b/evthread_win32.c @@ -38,13 +38,18 @@ struct event_base; #include "mm-internal.h" +#define SPIN_COUNT 2000 + static void * evthread_win32_lock_create(unsigned locktype) { CRITICAL_SECTION *lock = mm_malloc(sizeof(CRITICAL_SECTION)); if (!lock) return NULL; - InitializeCriticalSection(lock); + if (InitializeCriticalSectionAndSpinCount(lock, SPIN_COUNT) == 0) { + mm_free(lock); + return NULL; + } return lock; }