@@ -249,16 +249,16 @@ static void _batch_write(rlm_linelog_file_t *file)
249249 }
250250
251251done :
252- if (exfile_close (inst -> file .ef , fd ) < 0 ) {
252+ if (( fd >= 0 ) && ( exfile_close (inst -> file .ef , fd ) < 0 ) ) {
253253 PERROR ("Failed closing file %s" , file -> filename );
254254 }
255255
256256 fr_dbuff_reset_talloc (& file -> dbuff );
257257 file -> entry_p = file -> entry ;
258258
259259 if (fr_time_delta_gt (inst -> file .buffer_expiry , fr_time_delta_wrap (0 ))) {
260- fr_timer_in (file , file -> thread_inst -> tl , & file -> expiry , inst -> file .buffer_expiry ,
261- false, _batching_cleanup_timer , file );
260+ MEM ( fr_timer_in (file , file -> thread_inst -> tl , & file -> expiry , inst -> file .buffer_expiry ,
261+ false, _batching_cleanup_timer , file )) ;
262262 }
263263}
264264
@@ -290,14 +290,20 @@ linelog_buffer_action_t file_enqueue_write(rlm_linelog_file_entry_t **entry_p, m
290290
291291 file -> filename = talloc_strdup (file , path );
292292 file -> log_header = fr_value_box_alloc_null (file );
293+
294+ if (unlikely (!file -> log_header )) {
295+ RPERROR ("Failed to allocate log header for buffered log file %pV" , call_env -> filename );
296+ error :
297+ talloc_free (file );
298+ return LINELOG_BUFFER_WRITE_FAIL ;
299+ }
300+
293301 file -> mod_inst = inst ;
294302 file -> thread_inst = thread ;
295303
296304 if (call_env -> log_head && fr_value_box_copy (file , file -> log_header , call_env -> log_head ) < 0 ) {
297305 RPERROR ("Failed to copy log header for buffered log file %pV" , call_env -> filename );
298- error :
299- talloc_free (file );
300- return LINELOG_BUFFER_WRITE_FAIL ;
306+ goto error ;
301307 }
302308
303309 file -> entry_p = file -> entry ;
@@ -337,8 +343,12 @@ linelog_buffer_action_t file_enqueue_write(rlm_linelog_file_entry_t **entry_p, m
337343 * entry_p = file -> entry_p ;
338344
339345 if (fr_time_delta_gt (inst -> file .buffer_delay , fr_time_delta_wrap (0 )) && !fr_timer_armed (file -> write ) ) {
340- fr_timer_in (file , file -> thread_inst -> tl , & file -> write , inst -> file .buffer_delay ,
341- false, _batching_handle_timeout , file );
346+ if (fr_timer_in (file , file -> thread_inst -> tl , & file -> write , inst -> file .buffer_delay ,
347+ false, _batching_handle_timeout , file )) {
348+ RPERROR ("Failed to insert timer for buffered log file %pV" , call_env -> filename );
349+ file -> entry_p -> failed = true;
350+ return LINELOG_BUFFER_WRITE_FAIL ;
351+ }
342352 }
343353
344354 file -> entry_p -> data_len = ret ;
0 commit comments