@@ -51,6 +51,7 @@ struct flb_sb {
51
51
struct flb_input_instance * ins ; /* input instance */
52
52
struct cio_ctx * cio ; /* chunk i/o instance */
53
53
struct mk_list backlogs ; /* list of all pending chunks segregated by output plugin */
54
+ flb_route_mask_element * dummy_routes_mask ; /* dummy route mask used when segregating events */
54
55
};
55
56
56
57
@@ -280,43 +281,33 @@ static int sb_append_chunk_to_segregated_backlogs(struct cio_chunk *target_chun
280
281
int tag_len ;
281
282
const char * tag_buf ;
282
283
int result ;
283
- flb_route_mask_element * dummy_routes_mask ;
284
-
285
- dummy_routes_mask = flb_calloc (context -> ins -> config -> route_mask_slots ,
286
- sizeof (flb_route_mask_element ));
287
-
288
- if (dummy_routes_mask == NULL ) {
289
- flb_error ("[storage backlog] could not allocate route mask elements %s/%s" ,
290
- stream -> name , target_chunk -> name );
291
-
292
- return -1 ;
293
- }
294
284
295
285
memset (& dummy_input_chunk , 0 , sizeof (struct flb_input_chunk ));
296
- memset (dummy_routes_mask , 0 , sizeof (dummy_routes_mask ));
286
+
287
+ memset (context -> dummy_routes_mask ,
288
+ 0 ,
289
+ context -> ins -> config -> route_mask_slots * sizeof (flb_route_mask_element ));
297
290
298
291
dummy_input_chunk .in = context -> ins ;
299
292
dummy_input_chunk .chunk = target_chunk ;
300
- dummy_input_chunk .routes_mask = dummy_routes_mask ;
293
+ dummy_input_chunk .routes_mask = context -> dummy_routes_mask ;
301
294
302
295
chunk_size = cio_chunk_get_real_size (target_chunk );
303
296
304
297
if (chunk_size < 0 ) {
305
298
flb_warn ("[storage backlog] could not get real size of chunk %s/%s" ,
306
299
stream -> name , target_chunk -> name );
307
- flb_free (dummy_routes_mask );
308
300
309
- return -2 ;
301
+ return -1 ;
310
302
}
311
303
312
304
result = flb_input_chunk_get_tag (& dummy_input_chunk , & tag_buf , & tag_len );
313
305
if (result == -1 ) {
314
306
flb_error ("[storage backlog] could not retrieve chunk tag from %s/%s, "
315
307
"removing it from the queue" ,
316
308
stream -> name , target_chunk -> name );
317
- flb_free (dummy_routes_mask );
318
309
319
- return -3 ;
310
+ return -2 ;
320
311
}
321
312
322
313
flb_routes_mask_set_by_tag (dummy_input_chunk .routes_mask , tag_buf , tag_len ,
@@ -330,15 +321,11 @@ static int sb_append_chunk_to_segregated_backlogs(struct cio_chunk *target_chun
330
321
result = sb_append_chunk_to_segregated_backlog (target_chunk , stream ,
331
322
chunk_size , backlog );
332
323
if (result ) {
333
- flb_free (dummy_routes_mask );
334
-
335
- return -4 ;
324
+ return -3 ;
336
325
}
337
326
}
338
327
}
339
328
340
- flb_free (dummy_routes_mask );
341
-
342
329
return 0 ;
343
330
}
344
331
@@ -670,12 +657,25 @@ static int cb_sb_init(struct flb_input_instance *in,
670
657
char mem [32 ];
671
658
struct flb_sb * ctx ;
672
659
673
- ctx = flb_malloc (sizeof (struct flb_sb ));
660
+ ctx = flb_calloc (1 , sizeof (struct flb_sb ));
661
+
674
662
if (!ctx ) {
675
663
flb_errno ();
676
664
return -1 ;
677
665
}
678
666
667
+ ctx -> dummy_routes_mask = flb_calloc (in -> config -> route_mask_slots ,
668
+ sizeof (flb_route_mask_element ));
669
+
670
+ if (ctx -> dummy_routes_mask == NULL ) {
671
+ flb_errno ();
672
+ flb_free (ctx );
673
+
674
+ flb_error ("[storage backlog] could not allocate route mask elements" );
675
+
676
+ return -1 ;
677
+ }
678
+
679
679
ctx -> cio = data ;
680
680
ctx -> ins = in ;
681
681
ctx -> mem_limit = flb_utils_size_to_bytes (config -> storage_bl_mem_limit );
@@ -692,6 +692,7 @@ static int cb_sb_init(struct flb_input_instance *in,
692
692
ret = flb_input_set_collector_time (in , cb_queue_chunks , 1 , 0 , config );
693
693
if (ret < 0 ) {
694
694
flb_plg_error (ctx -> ins , "could not create collector" );
695
+ flb_free (ctx -> dummy_routes_mask );
695
696
flb_free (ctx );
696
697
return -1 ;
697
698
}
@@ -720,6 +721,10 @@ static int cb_sb_exit(void *data, struct flb_config *config)
720
721
721
722
sb_destroy_backlogs (ctx );
722
723
724
+ if (ctx -> dummy_routes_mask != NULL ) {
725
+ flb_free (ctx -> dummy_routes_mask );
726
+ }
727
+
723
728
flb_free (ctx );
724
729
725
730
return 0 ;
0 commit comments