@@ -122,10 +122,8 @@ static void dd_sidecar_post_connect(ddog_SidecarTransport **transport, bool is_f
122122}
123123
124124static ddog_SidecarTransport * dd_sidecar_connection_factory_ex (bool is_fork );
125- #ifndef _WIN32
126125static ddog_SidecarTransport * dd_sidecar_connection_factory_thread (void );
127126static void ddtrace_sidecar_setup_thread_mode (bool appsec_activation , bool appsec_config );
128- #endif
129127
130128static void dd_sidecar_on_reconnect (ddog_SidecarTransport * transport ) {
131129 if (!ddtrace_endpoint || !dogstatsd_endpoint ) {
@@ -205,7 +203,6 @@ ddog_SidecarTransport *ddtrace_sidecar_connect_subprocess(void) {
205203 return sidecar_transport ;
206204}
207205
208- #ifndef _WIN32
209206static ddog_SidecarTransport * ddtrace_sidecar_connect_as_worker (bool is_fork ) {
210207 if (!ddtrace_endpoint ) {
211208 return NULL ;
@@ -214,7 +211,11 @@ static ddog_SidecarTransport *ddtrace_sidecar_connect_as_worker(bool is_fork) {
214211
215212 dd_set_endpoint_test_token (dogstatsd_endpoint );
216213
214+ #ifdef _WIN32
215+ char logpath [MAX_PATH ];
216+ #else
217217 char logpath [MAXPATHLEN ];
218+ #endif
218219 int error_fd = atomic_load (& ddtrace_error_log_fd );
219220 if (error_fd == -1 || ddtrace_get_fd_path (error_fd , logpath ) < 0 ) {
220221 * logpath = 0 ;
@@ -240,12 +241,14 @@ static ddog_SidecarTransport *ddtrace_sidecar_connect_as_worker(bool is_fork) {
240241static ddog_SidecarTransport * dd_sidecar_connection_factory_thread (void ) {
241242 return ddtrace_sidecar_connect_as_worker (false);
242243}
243- #endif
244244
245245static void ddtrace_sidecar_setup_thread_mode (bool appsec_activation , bool appsec_config ) {
246- #ifndef _WIN32
247- pid_t current_pid = getpid ();
248- bool is_child_process = (ddtrace_sidecar_master_pid != 0 && (int32_t )current_pid != ddtrace_sidecar_master_pid );
246+ #ifdef _WIN32
247+ int32_t current_pid = (int32_t )GetCurrentProcessId ();
248+ #else
249+ int32_t current_pid = (int32_t )getpid ();
250+ #endif
251+ bool is_child_process = (ddtrace_sidecar_master_pid != 0 && current_pid != ddtrace_sidecar_master_pid );
249252
250253 bool listener_available = ddog_sidecar_is_master_listener_active (ddtrace_sidecar_master_pid );
251254
@@ -268,7 +271,6 @@ static void ddtrace_sidecar_setup_thread_mode(bool appsec_activation, bool appse
268271 }
269272 return ;
270273 }
271- #endif
272274
273275 ddtrace_set_non_resettable_sidecar_globals ();
274276 ddtrace_set_resettable_sidecar_globals ();
@@ -296,21 +298,16 @@ static void ddtrace_sidecar_setup_thread_mode(bool appsec_activation, bool appse
296298 }
297299}
298300
299- #ifndef _WIN32
300301ddog_SidecarTransport * ddtrace_sidecar_connect_thread (void ) {
301302 return ddtrace_sidecar_connect_as_worker (false);
302303}
303- #endif
304304
305305ddog_SidecarTransport * ddtrace_sidecar_connect (bool is_fork ) {
306306 if (ddtrace_sidecar_active_mode == DD_SIDECAR_CONNECTION_SUBPROCESS ) {
307307 return ddtrace_sidecar_connect_subprocess ();
308- }
309- #ifndef _WIN32
310- else if (ddtrace_sidecar_active_mode == DD_SIDECAR_CONNECTION_THREAD ) {
308+ } else if (ddtrace_sidecar_active_mode == DD_SIDECAR_CONNECTION_THREAD ) {
311309 return ddtrace_sidecar_connect_thread ();
312310 }
313- #endif
314311
315312 zend_long mode = get_global_DD_TRACE_SIDECAR_CONNECTION_MODE ();
316313 ddog_SidecarTransport * transport = NULL ;
@@ -324,15 +321,13 @@ ddog_SidecarTransport *ddtrace_sidecar_connect(bool is_fork) {
324321 }
325322 break ;
326323
327- #ifndef _WIN32
328324 case DD_TRACE_SIDECAR_CONNECTION_MODE_THREAD :
329325 // Force thread only
330326 transport = ddtrace_sidecar_connect_thread ();
331327 if (!transport ) {
332328 LOG (ERROR , "Thread connection failed (mode=thread, no fallback)" );
333329 }
334330 break ;
335- #endif
336331
337332 case DD_TRACE_SIDECAR_CONNECTION_MODE_AUTO :
338333 default :
@@ -341,7 +336,6 @@ ddog_SidecarTransport *ddtrace_sidecar_connect(bool is_fork) {
341336
342337 if (!transport ) {
343338 if (ddtrace_endpoint ) {
344- #ifndef _WIN32
345339 // Subprocess failed but endpoint is valid - try thread mode fallback
346340 LOG (WARN , "Subprocess connection failed, falling back to thread mode" );
347341 transport = ddtrace_sidecar_connect_thread ();
@@ -351,7 +345,6 @@ ddog_SidecarTransport *ddtrace_sidecar_connect(bool is_fork) {
351345 } else {
352346 LOG (ERROR , "Both subprocess and thread connections failed, sidecar unavailable" );
353347 }
354- #endif
355348 }
356349 }
357350 break ;
@@ -400,12 +393,10 @@ bool ddtrace_sidecar_should_enable(bool *appsec_activation, bool *appsec_config)
400393void ddtrace_sidecar_setup (bool appsec_activation , bool appsec_config ) {
401394 zend_long mode = get_global_DD_TRACE_SIDECAR_CONNECTION_MODE ();
402395
403- #ifndef _WIN32
404396 if (mode == DD_TRACE_SIDECAR_CONNECTION_MODE_THREAD ) {
405397 ddtrace_sidecar_setup_thread_mode (appsec_activation , appsec_config );
406398 return ;
407399 }
408- #endif
409400
410401 ddtrace_set_non_resettable_sidecar_globals ();
411402 ddtrace_set_resettable_sidecar_globals ();
@@ -415,13 +406,11 @@ void ddtrace_sidecar_setup(bool appsec_activation, bool appsec_config) {
415406 ddtrace_sidecar = ddtrace_sidecar_connect_subprocess ();
416407
417408 if (!ddtrace_sidecar ) {
418- #ifndef _WIN32
419409 if (mode == DD_TRACE_SIDECAR_CONNECTION_MODE_AUTO && ddtrace_endpoint ) {
420410 LOG (WARN , "Subprocess connection failed, falling back to thread mode" );
421411 ddtrace_sidecar_setup_thread_mode (appsec_activation , appsec_config );
422412 return ;
423413 }
424- #endif
425414
426415 if (ddtrace_endpoint ) {
427416 dd_free_endpoints ();
@@ -432,16 +421,18 @@ void ddtrace_sidecar_setup(bool appsec_activation, bool appsec_config) {
432421}
433422
434423void ddtrace_sidecar_minit (void ) {
435- #ifndef _WIN32
424+ #ifdef _WIN32
425+ ddtrace_sidecar_master_pid = (int32_t )GetCurrentProcessId ();
426+ #else
436427 ddtrace_sidecar_master_pid = (int32_t )getpid ();
428+ #endif
437429
438430 zend_long mode = get_global_DD_TRACE_SIDECAR_CONNECTION_MODE ();
439431
440432 if (mode == DD_TRACE_SIDECAR_CONNECTION_MODE_THREAD ) {
441433 ddtrace_ffi_try ("Starting sidecar master listener in MINIT" ,
442434 ddog_sidecar_connect_master (ddtrace_sidecar_master_pid ));
443435 }
444- #endif
445436}
446437
447438void ddtrace_sidecar_handle_fork (void ) {
0 commit comments