Skip to content

Commit f0c81cc

Browse files
committed
in_ebpf: Clean up ebpf programs cleanly
Signed-off-by: Hiroshi Hatake <hiroshi@chronosphere.io>
1 parent 0220375 commit f0c81cc

2 files changed

Lines changed: 15 additions & 4 deletions

File tree

plugins/in_ebpf/in_ebpf.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
#include "traces/traces.h"
2525

2626
int trace_register(struct flb_in_ebpf_context *ctx, const char *name,
27-
struct bpf_object *obj, trace_event_handler_t handler) {
27+
void *skel, struct bpf_object *obj,
28+
trace_skel_destroy_func_t skel_destroy,
29+
trace_event_handler_t handler) {
2830
struct trace_context *trace;
2931
struct bpf_map *map, *events_map;
3032
int map_fd;
@@ -38,7 +40,9 @@ int trace_register(struct flb_in_ebpf_context *ctx, const char *name,
3840

3941
trace = &ctx->traces[ctx->trace_count];
4042
trace->name = name;
43+
trace->skel = skel;
4144
trace->obj = obj;
45+
trace->skel_destroy = skel_destroy;
4246
trace->handler = handler;
4347

4448
bpf_object__for_each_map(map, obj) {
@@ -102,7 +106,8 @@ int trace_setup(struct flb_in_ebpf_context *ctx, const char *trace_name) {
102106
return -1;
103107
}
104108

105-
if (trace_register(ctx, trace_name, obj, reg->handler) != 0) {
109+
if (trace_register(ctx, trace_name, skel, obj,
110+
reg->skel_destroy, reg->handler) != 0) {
106111
flb_plg_error(ctx->ins, "failed to register trace handler for: %s", trace_name);
107112
reg->skel_destroy(skel);
108113
return -1;
@@ -185,7 +190,9 @@ static int in_ebpf_init(struct flb_input_instance *ins, struct flb_config *confi
185190
flb_plg_error(ctx->ins, "failed to set up collector");
186191
for (int i = 0; i < ctx->trace_count; i++) {
187192
ring_buffer__free(ctx->traces[i].rb);
188-
bpf_object__close(ctx->traces[i].obj);
193+
if (ctx->traces[i].skel_destroy) {
194+
ctx->traces[i].skel_destroy(ctx->traces[i].skel);
195+
}
189196
}
190197
flb_log_event_encoder_destroy(ctx->log_encoder);
191198
flb_free(ctx);
@@ -217,7 +224,9 @@ static int in_ebpf_exit(void *in_context, struct flb_config *config) {
217224

218225
for (int i = 0; i < ctx->trace_count; i++) {
219226
ring_buffer__free(ctx->traces[i].rb);
220-
bpf_object__close(ctx->traces[i].obj);
227+
if (ctx->traces[i].skel_destroy) {
228+
ctx->traces[i].skel_destroy(ctx->traces[i].skel);
229+
}
221230
}
222231

223232
if (ctx->log_encoder) {

plugins/in_ebpf/traces/traces.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ typedef int (*trace_event_handler_t)(void *ctx, void *data, size_t data_sz);
2828
struct trace_context {
2929
const char *name;
3030
struct ring_buffer *rb;
31+
void *skel;
3132
struct bpf_object *obj;
33+
trace_skel_destroy_func_t skel_destroy;
3234
trace_event_handler_t handler;
3335
};
3436

0 commit comments

Comments
 (0)