Skip to content

Commit

Permalink
Fix crash
Browse files Browse the repository at this point in the history
Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
  • Loading branch information
bwoebi committed Sep 30, 2024
1 parent 2644c45 commit 058b09e
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 8 deletions.
17 changes: 13 additions & 4 deletions .circleci/continue_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ commands:
-e DD_AGENT_HOST=127.0.0.1 \
-e DATADOG_HAVE_DEV_ENV=1 \
-e BASH_ENV=/home/circleci/bashenv/bash.sh \
-e ASAN_OPTIONS=abort_on_error=1 \
-e ASAN_OPTIONS="abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1" \
-e CIRCLE_SHA1 \
-e CIRCLE_BRANCH \
-e CODECOV_TOKEN \
Expand Down Expand Up @@ -1019,7 +1019,7 @@ jobs:
- run:
command: |
mkdir -p /tmp/artifacts/core_dumps
find tmp -name "core.*" | xargs -I % -n 1 cp % /tmp/artifacts/core_dumps
find /tmp -name "core.*" | xargs -I % -n 1 cp % /tmp/artifacts/core_dumps
cp -a tmp/build_extension/tests/ext /tmp/artifacts/tests
when: on_fail
- store_artifacts:
Expand Down Expand Up @@ -1090,13 +1090,18 @@ jobs:
sudo useradd -u 3434 docker-circleci
sudo chown -R docker-circleci . tests
# - <<: *STEP_WAIT_REQUEST_REPLAYER
- run:
name: Set core pattern
command: |
sudo sh -c "echo '/tmp/core.%e.%p.%t' > /proc/sys/kernel/core_pattern"
- run:
name: Run tests
command: |
docker-compose run --rm \
-e DDAGENT_HOSTNAME=127.0.0.1 \
-e DD_AGENT_HOST=127.0.0.1 \
-e DATADOG_HAVE_DEV_ENV=1 \
-e ASAN_OPTIONS="abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1" \
-e PHP_VARIANT=<< parameters.switch_php_version >> \
-e PHPUNIT_OPTS="--log-junit test-results/php-unit/results.xml" \
<< parameters.php_major_minor >>-buster-arm64 \
Expand All @@ -1114,7 +1119,7 @@ jobs:
- run:
command: |
mkdir -p /tmp/artifacts/core_dumps
find tmp -name "core.*" | xargs -I % -n 1 cp % /tmp/artifacts/core_dumps
find /tmp -name "core.*" | xargs -I % -n 1 cp % /tmp/artifacts/core_dumps
cp -a tmp/build_extension/tests/ext /tmp/artifacts/tests
when: on_fail
- store_artifacts:
Expand Down Expand Up @@ -1200,6 +1205,10 @@ jobs:
- source-v1-{{ .Branch }}-{{ .Revision }}
- git_checkout
- <<: *STEP_ATTACH_WORKSPACE
- run:
name: Set core pattern
command: |
sudo sh -c "echo '/tmp/core.%e.%p.%t' > /proc/sys/kernel/core_pattern"
- setup_docker:
docker_image: datadog/dd-trace-ci:php-<< parameters.php_major_minor >>_buster
extra: with_httpbin_and_request_replayer
Expand Down Expand Up @@ -1236,7 +1245,7 @@ jobs:
- run:
command: |
mkdir -p /tmp/artifacts/core_dumps
find tmp -name "core.*" | xargs -I % -n 1 cp % /tmp/artifacts/core_dumps
find /tmp -name "core.*" | xargs -I % -n 1 cp % /tmp/artifacts/core_dumps
cp -a tmp/build_extension/tests/ext /tmp/artifacts/tests
when: on_fail
- store_artifacts:
Expand Down
14 changes: 14 additions & 0 deletions ext/live_debugger.c
Original file line number Diff line number Diff line change
Expand Up @@ -575,10 +575,24 @@ static int64_t dd_set_probe(const ddog_Probe probe, const ddog_MaybeShmLimiter *
static void dd_remove_live_debugger_probe(int64_t id) {
dd_probe_def *def;
if ((def = zend_hash_index_find_ptr(&DDTRACE_G(active_rc_hooks), (zend_ulong)id))) {
zend_string *scope = def->scope;
if (scope) {
GC_TRY_ADDREF(scope);
}
zend_string *func = def->function;
if (func) {
GC_TRY_ADDREF(func);
}
zai_hook_remove(
def->scope ? (zai_str)ZAI_STR_FROM_ZSTR(def->scope) : (zai_str)ZAI_STR_EMPTY,
def->function ? (zai_str)ZAI_STR_FROM_ZSTR(def->function) : (zai_str)ZAI_STR_EMPTY,
id);
if (scope) {
zend_string_release(scope);
}
if (func) {
zend_string_release(func);
}
}
}

Expand Down
13 changes: 13 additions & 0 deletions ext/telemetry.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <hook/hook.h>
#include <components-rs/ddtrace.h>
#include "telemetry.h"
#include "serializer.h"
#include "sidecar.h"

ZEND_EXTERN_MODULE_GLOBALS(ddtrace);
Expand Down Expand Up @@ -145,14 +146,22 @@ void ddtrace_telemetry_finalize(void) {
ddtrace_ffi_try("Failed flushing telemetry buffer",
ddog_sidecar_telemetry_buffer_flush(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), buffer));

zend_string *free_string = NULL;
ddog_CharSlice service_name = DDOG_CHARSLICE_C_BARE("unnamed-php-service");
if (DDTRACE_G(last_flushed_root_service_name)) {
service_name = dd_zend_string_to_CharSlice(DDTRACE_G(last_flushed_root_service_name));
} else if (ZSTR_LEN(get_DD_SERVICE())) {
service_name = dd_zend_string_to_CharSlice(get_DD_SERVICE());
} else {
free_string = ddtrace_default_service_name();
service_name = dd_zend_string_to_CharSlice(free_string);
}

ddog_CharSlice env_name = DDOG_CHARSLICE_C_BARE("none");
if (DDTRACE_G(last_flushed_root_env_name)) {
env_name = dd_zend_string_to_CharSlice(DDTRACE_G(last_flushed_root_env_name));
} else if (ZSTR_LEN(get_DD_ENV())) {
env_name = dd_zend_string_to_CharSlice(get_DD_ENV());
}

ddog_CharSlice php_version = dd_zend_string_to_CharSlice(Z_STR_P(zend_get_constant_str(ZEND_STRL("PHP_VERSION"))));
Expand All @@ -161,6 +170,10 @@ void ddtrace_telemetry_finalize(void) {
ddtrace_ffi_try("Failed flushing service data",
ddog_sidecar_telemetry_flushServiceData(&ddtrace_sidecar, ddtrace_sidecar_instance_id, &DDTRACE_G(sidecar_queue_id), meta, service_name, env_name));

if (free_string) {
zend_string_release(free_string);
}

ddog_sidecar_runtimeMeta_drop(meta);
}

Expand Down
9 changes: 8 additions & 1 deletion tests/OpenTracing/InternalTelemetryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ protected function getScriptLocation()
return __DIR__ . '/../Frameworks/Custom/OpenTracing/index.php';
}

protected static function getEnvs()
{
return array_merge(parent::getEnvs(), [
"DD_SERVICE" => "internal-telemetry-test",
]);
}

private function readTelemetryPayloads($response)
{
$telemetryPayloads = [];
Expand All @@ -28,7 +35,7 @@ private function readTelemetryPayloads($response)
}

// Filter the payloads from the trace background sender
return array_values(array_filter($telemetryPayloads, function($p) { return ($p["application"]["service_name"] ?? "") != "background_sender-php-service"; }));
return array_values(array_filter($telemetryPayloads, function($p) { var_dump($p); return ($p["application"]["service_name"] ?? "") == "internal-telemetry-test"; }));
}

public function testInternalMetricWithOpenTracing()
Expand Down
5 changes: 2 additions & 3 deletions tests/ext/live-debugger/exception-replay_001.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,12 @@ array(2) {
string(5) "array"
}
["_SERVER"]=>
array(2) {
array(%d) {
["type"]=>
string(5) "array"
["entries"]=>
array(%d) {
%A
}
}
["argc"]=>
array(2) {
Expand All @@ -205,7 +204,7 @@ array(2) {
["type"]=>
string(6) "string"
["value"]=>
string(%d) "%s/exception-replay_001.php"
string(%d) "%sexception-replay_001.php"
}
}
}
Expand Down

0 comments on commit 058b09e

Please sign in to comment.