Skip to content

Commit 939f1ac

Browse files
fix double free (#3407)
1 parent ab08480 commit 939f1ac

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

ext/sidecar.c

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,10 @@ static ddog_SidecarTransport *dd_sidecar_connection_factory_ex(bool is_fork) {
165165

166166
ddog_SidecarTransport *sidecar_transport;
167167
if (!ddtrace_ffi_try("Failed connecting to the sidecar", ddog_sidecar_connect_php(&sidecar_transport, logpath, dd_zend_string_to_CharSlice(get_global_DD_TRACE_LOG_LEVEL()), get_global_DD_INSTRUMENTATION_TELEMETRY_ENABLED(), dd_sidecar_on_reconnect))) {
168-
ddog_endpoint_drop(dogstatsd_endpoint);
168+
if (dogstatsd_endpoint) {
169+
ddog_endpoint_drop(dogstatsd_endpoint);
170+
dogstatsd_endpoint = NULL;
171+
}
169172
return NULL;
170173
}
171174

@@ -209,10 +212,15 @@ void ddtrace_sidecar_setup(bool appsec_activation, bool appsec_config) {
209212
ddog_init_remote_config(get_global_DD_INSTRUMENTATION_TELEMETRY_ENABLED(), appsec_activation, appsec_config);
210213

211214
ddtrace_sidecar = dd_sidecar_connection_factory();
212-
if (!ddtrace_sidecar && ddtrace_endpoint) { // Something went wrong
213-
ddog_endpoint_drop(ddtrace_endpoint);
214-
ddog_endpoint_drop(dogstatsd_endpoint);
215-
ddtrace_endpoint = NULL;
215+
if (!ddtrace_sidecar) { // Something went wrong
216+
if (ddtrace_endpoint) {
217+
ddog_endpoint_drop(ddtrace_endpoint);
218+
ddtrace_endpoint = NULL;
219+
}
220+
if (dogstatsd_endpoint) {
221+
ddog_endpoint_drop(dogstatsd_endpoint);
222+
dogstatsd_endpoint = NULL;
223+
}
216224
}
217225

218226
if (get_global_DD_INSTRUMENTATION_TELEMETRY_ENABLED()) {
@@ -250,10 +258,16 @@ void ddtrace_sidecar_shutdown(void) {
250258
if (ddtrace_sidecar_instance_id) {
251259
ddog_sidecar_instanceId_drop(ddtrace_sidecar_instance_id);
252260
}
261+
253262
if (ddtrace_endpoint) {
254263
ddog_endpoint_drop(ddtrace_endpoint);
264+
}
265+
266+
if (dogstatsd_endpoint) {
255267
ddog_endpoint_drop(dogstatsd_endpoint);
268+
dogstatsd_endpoint = NULL;
256269
}
270+
257271
if (ddtrace_sidecar) {
258272
ddog_sidecar_transport_drop(ddtrace_sidecar);
259273
}
@@ -272,10 +286,15 @@ void ddtrace_reset_sidecar(void) {
272286
if (ddtrace_sidecar) {
273287
ddog_sidecar_transport_drop(ddtrace_sidecar);
274288
ddtrace_sidecar = dd_sidecar_connection_factory_ex(true);
275-
if (!ddtrace_sidecar && ddtrace_endpoint) { // Something went wrong
276-
ddog_endpoint_drop(ddtrace_endpoint);
277-
ddog_endpoint_drop(dogstatsd_endpoint);
278-
ddtrace_endpoint = NULL;
289+
if (!ddtrace_sidecar) { // Something went wrong
290+
if (ddtrace_endpoint) {
291+
ddog_endpoint_drop(ddtrace_endpoint);
292+
ddtrace_endpoint = NULL;
293+
}
294+
if (dogstatsd_endpoint) {
295+
ddog_endpoint_drop(dogstatsd_endpoint);
296+
dogstatsd_endpoint = NULL;
297+
}
279298
} else {
280299
ddtrace_sidecar_submit_root_span_data();
281300
}

0 commit comments

Comments
 (0)