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();