@@ -283,7 +283,7 @@ log_reader_open(LogReader *self, LogProtoServer *proto, PollEvents *poll_events)
283
283
log_reader_apply_proto_and_poll_events (self , proto , poll_events );
284
284
}
285
285
286
- static gboolean
286
+ gboolean
287
287
log_reader_is_opened (LogReader * self )
288
288
{
289
289
return self -> proto && self -> poll_events ;
@@ -349,6 +349,32 @@ log_reader_update_watches(LogReader *self)
349
349
}
350
350
}
351
351
352
+ static inline gboolean
353
+ log_reader_work_in_progress (LogReader * self )
354
+ {
355
+ main_loop_assert_main_thread ();
356
+
357
+ return self -> io_job .working ;
358
+ }
359
+
360
+ static inline void
361
+ log_reader_set_work_in_progress (LogReader * self , gboolean state )
362
+ {
363
+ if ((self -> options -> flags & LR_THREADED ) == 0 )
364
+ {
365
+ main_loop_assert_main_thread ();
366
+ self -> io_job .working = state ;
367
+ }
368
+ }
369
+
370
+ /* NOTE: See file-reader, file_reader_notify_method() why this is needed */
371
+ inline void
372
+ log_reader_trigger_one_check (LogReader * self )
373
+ {
374
+ if (FALSE == log_reader_work_in_progress (self ))
375
+ log_reader_force_check_in_next_poll (self );
376
+ }
377
+
352
378
/*****************************************************************************
353
379
* Glue into MainLoopIOWorker
354
380
*****************************************************************************/
@@ -358,6 +384,8 @@ log_reader_work_perform(void *s, gpointer arg)
358
384
{
359
385
LogReader * self = (LogReader * ) s ;
360
386
387
+ log_reader_set_work_in_progress (self , TRUE);
388
+
361
389
self -> notify_code = log_reader_fetch_log (self );
362
390
}
363
391
@@ -366,6 +394,8 @@ log_reader_work_finished(void *s, gpointer arg)
366
394
{
367
395
LogReader * self = (LogReader * ) s ;
368
396
397
+ log_reader_set_work_in_progress (self , FALSE);
398
+
369
399
if (self -> pending_close )
370
400
{
371
401
/* pending proto is only set in the main thread, so no need to
@@ -389,6 +419,7 @@ log_reader_work_finished(void *s, gpointer arg)
389
419
self -> notify_code = 0 ;
390
420
log_pipe_notify (self -> control , notify_code , self );
391
421
}
422
+
392
423
if (self -> super .super .flags & PIF_INITIALIZED )
393
424
{
394
425
/* reenable polling the source assuming that we're still in
@@ -567,6 +598,7 @@ log_reader_io_handle_in(gpointer s)
567
598
LogReader * self = (LogReader * ) s ;
568
599
569
600
log_reader_disable_watches (self );
601
+
570
602
if ((self -> options -> flags & LR_THREADED ))
571
603
{
572
604
main_loop_io_worker_job_submit (& self -> io_job , NULL );
0 commit comments