diff --git a/src/win/core.c b/src/win/core.c index 4dfb0794..57ef1c14 100644 --- a/src/win/core.c +++ b/src/win/core.c @@ -55,6 +55,9 @@ static void uv_init(void) { /* Initialize console */ uv_console_init(); + + /* Initialize utilities */ + uv__util_init(); } diff --git a/src/win/internal.h b/src/win/internal.h index 186b62c3..0dff80cd 100644 --- a/src/win/internal.h +++ b/src/win/internal.h @@ -349,7 +349,11 @@ void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle); void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle); -/* Utils */ +/* + * Utilities. + */ +void uv__util_init(); + int uv_parent_pid(); void uv_filetime_to_time_t(FILETIME* file_time, time_t* stat_time); void uv_fatal_error(const int errorno, const char* syscall); diff --git a/src/win/util.c b/src/win/util.c index d79388af..3e20e79c 100644 --- a/src/win/util.c +++ b/src/win/util.c @@ -47,10 +47,21 @@ */ #define MAX_TITLE_LENGTH 8192 + +/* Cached copy of the process title, plus a mutex guarding it. */ static char *process_title; -static uv_once_t uv_process_title_init_guard_ = UV_ONCE_INIT; static CRITICAL_SECTION process_title_lock; + +/* + * One-time intialization code for functionality defined in util.c. + */ +void uv__util_init() { + /* Initialize process title access mutex. */ + InitializeCriticalSection(&process_title_lock); +} + + int uv_utf16_to_utf8(const wchar_t* utf16Buffer, size_t utf16Size, char* utf8Buffer, size_t utf8Size) { return WideCharToMultiByte(CP_UTF8, @@ -265,17 +276,12 @@ char** uv_setup_args(int argc, char** argv) { } -static void uv_process_title_init(void) { - InitializeCriticalSection(&process_title_lock); -} - - uv_err_t uv_set_process_title(const char* title) { uv_err_t err; int length; wchar_t* title_w = NULL; - uv_once(&uv_process_title_init_guard_, uv_process_title_init); + uv__once_init(); /* Find out how big the buffer for the wide-char title must be */ length = uv_utf8_to_utf16(title, NULL, 0); @@ -350,7 +356,7 @@ static int uv__get_process_title() { uv_err_t uv_get_process_title(char* buffer, size_t size) { - uv_once(&uv_process_title_init_guard_, uv_process_title_init); + uv__once_init(); EnterCriticalSection(&process_title_lock); /*