2424#include "traces/traces.h"
2525
2626int 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 ) {
0 commit comments