Skip to content

Commit 60b8ded

Browse files
committed
Fix rust destructors for frankenphp
Signed-off-by: Bob Weinand <[email protected]>
1 parent 0841bd4 commit 60b8ded

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

ext/ddtrace.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ static bool dd_has_other_observers;
118118
static int dd_observer_extension_backup = -1;
119119
#endif
120120

121+
datadog_php_sapi ddtrace_active_sapi;
122+
121123
_Atomic(int64_t) ddtrace_warn_legacy_api;
122124

123125
ZEND_DECLARE_MODULE_GLOBALS(ddtrace)
@@ -571,7 +573,7 @@ static PHP_GSHUTDOWN_FUNCTION(ddtrace) {
571573
zai_hook_gshutdown();
572574

573575
#ifdef CXA_THREAD_ATEXIT_WRAPPER
574-
if (!dd_is_main_thread) {
576+
if (!dd_is_main_thread && ddtrace_active_sapi != DATADOG_PHP_SAPI_FRANKENPHP) {
575577
dd_run_rust_thread_destructors(NULL);
576578
}
577579
#endif
@@ -983,8 +985,8 @@ static void dd_register_fatal_error_ce(void) {
983985
ddtrace_ce_fatal_error = zend_register_internal_class_ex(&ce, zend_ce_exception);
984986
}
985987

986-
static bool dd_is_compatible_sapi(datadog_php_string_view module_name) {
987-
switch (datadog_php_sapi_from_name(module_name)) {
988+
static bool dd_is_compatible_sapi() {
989+
switch (ddtrace_active_sapi) {
988990
case DATADOG_PHP_SAPI_APACHE2HANDLER:
989991
case DATADOG_PHP_SAPI_CGI_FCGI:
990992
case DATADOG_PHP_SAPI_CLI:
@@ -1000,8 +1002,7 @@ static bool dd_is_compatible_sapi(datadog_php_string_view module_name) {
10001002
}
10011003

10021004
static void dd_disable_if_incompatible_sapi_detected(void) {
1003-
datadog_php_string_view module_name = datadog_php_string_view_from_cstr(sapi_module.name);
1004-
if (UNEXPECTED(!dd_is_compatible_sapi(module_name))) {
1005+
if (UNEXPECTED(!dd_is_compatible_sapi())) {
10051006
LOG(WARN, "Incompatible SAPI detected '%s'; disabling ddtrace", sapi_module.name);
10061007
DDTRACE_G(disable) = 1;
10071008
}
@@ -1010,10 +1011,14 @@ static void dd_disable_if_incompatible_sapi_detected(void) {
10101011
static PHP_MINIT_FUNCTION(ddtrace) {
10111012
UNUSED(type);
10121013

1014+
ddtrace_active_sapi = datadog_php_sapi_from_name(datadog_php_string_view_from_cstr(sapi_module.name));
1015+
10131016
#ifdef CXA_THREAD_ATEXIT_WRAPPER
1014-
dd_is_main_thread = true;
1015-
glibc__cxa_thread_atexit_impl = CXA_THREAD_ATEXIT_PHP;
1016-
atexit(dd_clean_main_thread_locals);
1017+
if (ddtrace_active_sapi != DATADOG_PHP_SAPI_FRANKENPHP) {
1018+
dd_is_main_thread = true;
1019+
glibc__cxa_thread_atexit_impl = CXA_THREAD_ATEXIT_PHP;
1020+
atexit(dd_clean_main_thread_locals);
1021+
}
10171022
#endif
10181023

10191024
// Reset on every minit for `apachectl graceful`.

0 commit comments

Comments
 (0)