From 9387beca19633d15fda956dcf5c66dd5ae1520b6 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 4 Oct 2024 16:32:29 +0200 Subject: [PATCH] Fix memory leak with sidecar trace sender And set LSAN_OPTIONS=fast_unwind_on_malloc=0 for more complete traces --- Makefile | 5 +++-- ext/ddtrace.c | 4 ++-- ext/sidecar.c | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 2defe8b86f..a14c38532c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ Q := @ +, := , PROJECT_ROOT := ${PWD} TRACER_SOURCE_DIR := $(PROJECT_ROOT)/src/ ASAN ?= $(shell ldd $(shell which php) 2>/dev/null | grep -q libasan && echo 1) @@ -156,7 +157,7 @@ run_tests: $(TEST_FILES) $(TEST_STUB_FILES) $(BUILD_DIR)/run-tests.php DD_TRACE_GIT_METADATA_ENABLED=0 $(RUN_TESTS_CMD) $(TESTS) test_c: $(SO_FILE) $(TEST_FILES) $(TEST_STUB_FILES) $(BUILD_DIR)/run-tests.php - $(if $(ASAN), USE_ZEND_ALLOC=0 USE_TRACKED_ALLOC=1) DD_TRACE_GIT_METADATA_ENABLED=0 $(RUN_TESTS_CMD) -d extension=$(SO_FILE) $(BUILD_DIR)/$(subst $(BUILD_DIR_NAME)/,,$(TESTS)) + $(if $(ASAN), USE_ZEND_ALLOC=0 USE_TRACKED_ALLOC=1 LSAN_OPTIONS=fast_unwind_on_malloc=0$${LSAN_OPTIONS:+$(,)$${LSAN_OPTIONS}}) DD_TRACE_GIT_METADATA_ENABLED=0 $(RUN_TESTS_CMD) -d extension=$(SO_FILE) $(BUILD_DIR)/$(subst $(BUILD_DIR_NAME)/,,$(TESTS)) test_c_coverage: dist_clean DD_TRACE_DOCKER_DEBUG=1 EXTRA_CFLAGS="-fprofile-arcs -ftest-coverage" $(MAKE) test_c || exit 0 @@ -1405,7 +1406,7 @@ test_api_unit: composer.lock global_test_run_dependencies # Just test it does not crash, i.e. the exit code test_internal_api_randomized: $(SO_FILE) - $(if $(ASAN), USE_ZEND_ALLOC=0 USE_TRACKED_ALLOC=1) php -n -ddatadog.trace.cli_enabled=1 -d extension=$(SO_FILE) tests/internal-api-stress-test.php 2> >(grep -A 1000 ==============) + $(if $(ASAN), DD_TRACE_DEBUG=1 USE_ZEND_ALLOC=0 USE_TRACKED_ALLOC=1 LSAN_OPTIONS=fast_unwind_on_malloc=0$${LSAN_OPTIONS:+$(,)$${LSAN_OPTIONS}}) php -n -ddatadog.trace.cli_enabled=1 -d extension=$(SO_FILE) tests/internal-api-stress-test.php 2> >(grep -A 1000 ==============) composer.lock: composer.json $(call run_composer_with_retry,,) diff --git a/ext/ddtrace.c b/ext/ddtrace.c index 4e8fcb3c35..6c8f2e77ac 100644 --- a/ext/ddtrace.c +++ b/ext/ddtrace.c @@ -2460,7 +2460,7 @@ PHP_FUNCTION(dd_trace_internal_fn) { } else #endif if (ddtrace_sidecar) { - ddog_sidecar_flush_traces(&ddtrace_sidecar); + ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&ddtrace_sidecar)); } RETVAL_TRUE; #ifndef _WIN32 @@ -2577,7 +2577,7 @@ PHP_FUNCTION(dd_trace_synchronous_flush) { } else #endif if (ddtrace_sidecar) { - ddog_sidecar_flush_traces(&ddtrace_sidecar); + ddtrace_ffi_try("Failed synchronously flushing traces", ddog_sidecar_flush_traces(&ddtrace_sidecar)); } RETURN_NULL(); } diff --git a/ext/sidecar.c b/ext/sidecar.c index eed8124481..86f47aa306 100644 --- a/ext/sidecar.c +++ b/ext/sidecar.c @@ -354,7 +354,7 @@ void ddtrace_sidecar_submit_root_span_data_direct(ddtrace_root_span_data *root) changed = ddog_remote_configs_service_env_change(DDTRACE_G(remote_config_state), service_slice, env_slice, version_slice); } if (changed || !root) { - ddog_sidecar_set_remote_config_data(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), service_slice, env_slice, version_slice, &DDTRACE_G(active_global_tags)); + ddtrace_ffi_try("Failed sending remote config data", ddog_sidecar_set_remote_config_data(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), service_slice, env_slice, version_slice, &DDTRACE_G(active_global_tags))); } if (free_string) {