Merge pull request #442 from gmilos/SR-9863-sem-wait-signal-interrupt-fix

Retry sem_wait on signal interrupts
diff --git a/src/init.c b/src/init.c
index 11dabb9..e2131ca 100644
--- a/src/init.c
+++ b/src/init.c
@@ -733,15 +733,19 @@
 			dispatch_log_basetime = _dispatch_absolute_time();
 #endif
 #if defined(_WIN32)
-			FILE *pLogFile = _fdopen(dispatch_logfile, "w");
-
 			char szProgramName[MAX_PATH + 1] = {0};
 			GetModuleFileNameA(NULL, szProgramName, MAX_PATH);
 
-			fprintf(pLogFile, "=== log file opened for %s[%lu] at "
-					"%ld.%06u ===\n", szProgramName, GetCurrentProcessId(),
-					tv.tv_sec, (int)tv.tv_usec);
-			fclose(pLogFile);
+			char szMessage[512];
+			int len = snprintf(szMessage, sizeof(szMessage),
+					"=== log file opened for %s[%lu] at %ld.%06u ===",
+					szProgramName, GetCurrentProcessId(), tv.tv_sec,
+					(int)tv.tv_usec);
+			if (len > 0) {
+				len = MIN(len, sizeof(szMessage) - 1);
+				_write(dispatch_logfile, szMessage, len);
+				_write(dispatch_logfile, "\n", 1);
+			}
 #else
 			dprintf(dispatch_logfile, "=== log file opened for %s[%u] at "
 					"%ld.%06u ===\n", getprogname() ?: "", getpid(),
diff --git a/tests/dispatch_debug.c b/tests/dispatch_debug.c
index 858c572..df9900d 100644
--- a/tests/dispatch_debug.c
+++ b/tests/dispatch_debug.c
@@ -31,7 +31,11 @@
 int
 main(void)
 {
+#if defined(_WIN32)
+	_putenv_s("LIBDISPATCH_LOG", "stderr");
+#else
 	setenv("LIBDISPATCH_LOG", "stderr", 1); // rdar://problem/8493990
+#endif
 	dispatch_test_start("Dispatch Debug");
 
 	dispatch_queue_t main_q = dispatch_get_main_queue();