Skip to content

Commit

Permalink
support TSMRLS ZTS build for backtrace and logging extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
pawelchcki committed Feb 18, 2019
1 parent e3ae56b commit fe27353
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 14 deletions.
15 changes: 9 additions & 6 deletions src/ext/backtrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,30 @@
ZEND_EXTERN_MODULE_GLOBALS(ddtrace);

void ddtrace_backtrace_handler(int sig) {
ddtrace_log_err("Datadog PHP Trace extension (DEBUG MODE)");
ddtrace_log_errf("Received Signal %d", sig);
TSRMLS_FETCH();

ddtrace_log_err("Datadog PHP Trace extension (DEBUG MODE)" TSRMLS_CC);
ddtrace_log_errf("Received Signal %d" TSRMLS_CC, sig);
void *array[MAX_STACK_SIZE];
size_t size = backtrace(array, MAX_STACK_SIZE);

ddtrace_log_err("Note: Backtrace below might be incomplete and have wrong entries due to optimized runtime");
ddtrace_log_err("Backtrace:");
ddtrace_log_err(
"Note: Backtrace below might be incomplete and have wrong entries due to optimized runtime" TSRMLS_CC);
ddtrace_log_err("Backtrace:" TSRMLS_CC);

char **backtraces = backtrace_symbols(array, size);
if (backtraces) {
size_t i;
for (i = 0; i < size; i++) {
ddtrace_log_err(backtraces[i]);
ddtrace_log_err(backtraces[i] TSRMLS_CC);
}
free(backtraces);
}

exit(sig);
}

void ddtrace_install_backtrace_handler() {
void ddtrace_install_backtrace_handler(TSRMLS_D) {
if (!ddtrace_get_bool_config("DD_LOG_BACKTRACE", DDTRACE_G(log_backtrace))) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/ext/backtrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
#define DD_BACKTRACE_H
#define MAX_STACK_SIZE 1024
void ddtrace_backtrace_handler(int sig);
void ddtrace_install_backtrace_handler();
void ddtrace_install_backtrace_handler(TSRMLS_D);

#endif // DD_BACKTRACE_H
2 changes: 1 addition & 1 deletion src/ext/ddtrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ static PHP_MINIT_FUNCTION(ddtrace) {
if (DDTRACE_G(disable)) {
return SUCCESS;
}
ddtrace_install_backtrace_handler();
ddtrace_install_backtrace_handler(TSRMLS_C);

ddtrace_dispatch_init(TSRMLS_C);
ddtrace_dispatch_inject(TSRMLS_C);
Expand Down
3 changes: 2 additions & 1 deletion src/ext/env_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
#define EQUALS(stra, strb) (memcmp(stra, strb, sizeof(strb) - 1) == 0)

char *get_local_env_or_sapi_env(char *name) {
TSRMLS_FETCH();
char *env = NULL, *tmp = getenv(name);
if (tmp) {
env = estrdup(tmp);
} else {
env = sapi_getenv(name, strlen(name));
env = sapi_getenv(name, strlen(name) TSRMLS_CC);
}

return env;
Expand Down
7 changes: 3 additions & 4 deletions src/ext/logging.c
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
#include "logging.h"
#include <php.h>

void ddtrace_log_errf(const char *format, ...) {
void ddtrace_log_errf(const char *format TSRMLS_DC, ...) {
va_list args;
char *buffer;
size_t size;

va_start(args, format);
size = vspprintf(&buffer, 0, format, args);
ddtrace_log_err(buffer);
vspprintf(&buffer, 0, format, args);
ddtrace_log_err(buffer TSRMLS_CC);

efree(buffer);
va_end(args);
Expand Down
4 changes: 3 additions & 1 deletion src/ext/logging.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#ifndef DD_LOGGING_H
#define DD_LOGGING_H
#include <php.h>

#define ddtrace_log_err(message) php_log_err(message)
void ddtrace_log_errf(const char *format, ...);

void ddtrace_log_errf(const char *format TSRMLS_DC, ...);

#endif // DD_LOGGING_H

0 comments on commit fe27353

Please sign in to comment.