Skip to content

Commit a65203f

Browse files
committed
Fix log fd opening on windows
And leaking the error_log fds. Signed-off-by: Bob Weinand <[email protected]>
1 parent 9cc3c1f commit a65203f

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

Diff for: components/atomic_win32_polyfill.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
#define atomic_fetch_sub(var, val) atomic_fetch_add(var, -(val))
88
#define atomic_fetch_or _InterlockedOr64
99
#define atomic_fetch_and _InterlockedAnd64
10-
#define atomic_compare_exchange_strong(var, expected, val) _InterlockedCompareExchange64(var, *(expected), val)
10+
#define atomic_compare_exchange_strong(var, expected, val) (_InterlockedCompareExchange64(var, val, *(expected)) == *(expected))
11+
#define atomic_compare_exchange_strong_int(var, expected, val) (_InterlockedCompareExchange(var, val, *(expected)) == *(expected))
1112

1213
// "Simple reads and writes to properly aligned 64 bit [also 32 bit] variables are atomic on 64-bit windows"
1314
#define atomic_store(var, val) (*var = val)

Diff for: ext/logging.c

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
#include "configuration.h"
1010
#include <main/SAPI.h>
1111

12+
#ifndef _WIN32
13+
#define atomic_compare_exchange_strong_int atomic_compare_exchange_strong
14+
#endif
15+
1216

1317
static void dd_log_set_level(bool debug) {
1418
bool once = runtime_config_first_init ? get_DD_TRACE_ONCE_LOGS() : get_global_DD_TRACE_ONCE_LOGS();
@@ -83,7 +87,7 @@ void ddtrace_log_rinit(char *error_log) {
8387
time(&now);
8488
atomic_store(&dd_error_log_fd_rotated, (uintmax_t) now);
8589
int expected = -1;
86-
if (!atomic_compare_exchange_strong(&ddtrace_error_log_fd, &expected, desired)) {
90+
if (!atomic_compare_exchange_strong_int(&ddtrace_error_log_fd, &expected, desired)) {
8791
// if it didn't exchange, then we need to free it
8892
close(desired);
8993
}

0 commit comments

Comments
 (0)