Skip to content

Commit ab8e68c

Browse files
committed
Fix memory leak on roadrunner/frankenphp/etc due to appsec telemetry
1 parent 65439ac commit ab8e68c

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

ext/telemetry.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,25 @@ DATADOG_PUBLIC bool datadog_metric_add_point(zend_string *name, double value, ze
194194
return true;
195195
}
196196

197-
static void dd_commit_metrics() {
197+
void datadog_telemetry_commit_user_request_metrics(void) {
198198
if (!DATADOG_G(metrics_buffer)) {
199199
return;
200200
}
201+
202+
if (!DATADOG_G(sidecar) || !get_global_DD_INSTRUMENTATION_TELEMETRY_ENABLED()) {
203+
ddog_sidecar_telemetry_buffer_drop(DATADOG_G(metrics_buffer));
204+
DATADOG_G(metrics_buffer) = NULL;
205+
return;
206+
}
207+
208+
dd_commit_metrics();
209+
}
210+
211+
static void dd_commit_metrics(void) {
212+
if (!DATADOG_G(metrics_buffer)) {
213+
return;
214+
}
215+
201216
ddog_sidecar_telemetry_buffer_flush(
202217
&DATADOG_G(sidecar), datadog_sidecar_instance_id, &DATADOG_G(sidecar_queue_id), DATADOG_G(metrics_buffer));
203218
DATADOG_G(metrics_buffer) = NULL;

ext/telemetry.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const char *ddtrace_telemetry_redact_file(const char *file);
2828
void datadog_telemetry_rinit(void);
2929
void datadog_telemetry_rshutdown(void);
3030
void datadog_telemetry_finalize(void);
31+
void datadog_telemetry_commit_user_request_metrics(void);
3132
void datadog_telemetry_lifecycle_end(void);
3233
void datadog_telemetry_register_services(ddog_SidecarTransport **sidecar);
3334

tracer/user_request.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <main/SAPI.h>
33
#include "configuration.h"
44
#include "ddtrace.h"
5+
#include <ext/telemetry.h>
56
#include "span.h"
67

78
#define NS "DDTrace\\UserRequest\\"
@@ -196,6 +197,8 @@ void ddtrace_user_req_notify_finish(ddtrace_span_data *span)
196197
ddtrace_user_req_listeners *listener = reg_listeners.listeners[i];
197198
listener->finish_user_req(listener, &span->std);
198199
}
200+
201+
datadog_telemetry_commit_user_request_metrics();
199202
}
200203

201204
PHP_FUNCTION(DDTrace_UserRequest_set_blocking_function);

0 commit comments

Comments
 (0)