/* run in the main thread in reaction to a log_reader_reopen to change * the source LogProto instance. It needs to be ran in the main * thread as it reregisters the watches associated with the main * thread. */ void log_reader_reopen_deferred(gpointer s) { gpointer *args = (gpointer *) s; LogReader *self = args[0]; LogProto *proto = args[1]; log_reader_stop_watches(self); if (self->io_job.working) { /* NOTE: proto can be NULL */ self->pending_proto = proto; self->pending_proto_present = TRUE; return; } if (self->proto) log_proto_free(self->proto); self->proto = proto; if(proto) { log_reader_start_watches(self); } }
static void log_reader_io_process_input(gpointer s) { LogReader *self = (LogReader *) s; log_reader_stop_watches(self); log_pipe_ref(&self->super.super); if ((self->options->flags & LR_THREADED)) { main_loop_io_worker_job_submit(&self->io_job); } else { /* Checking main_loop_io_worker_job_quit() helps to speed up the * reload process. If reload/shutdown is requested we shouldn't do * anything here, outstanding messages will be processed by the new * configuration. * * Our current understanding is that it doesn't prevent race * conditions of any kind. */ if (!main_loop_io_worker_job_quit()) { log_reader_work_perform(s); log_reader_work_finished(s); } } }
static gboolean log_reader_deinit(LogPipe *s) { LogReader *self = (LogReader *) s; main_loop_assert_main_thread(); iv_event_unregister(&self->schedule_wakeup); log_reader_stop_watches(self); if (!log_source_deinit(s)) return FALSE; return TRUE; }
/* run in the main thread in reaction to a log_reader_reopen to change * the source LogProtoServer instance. It needs to be ran in the main * thread as it reregisters the watches associated with the main * thread. */ void log_reader_reopen_deferred(gpointer s) { gpointer *args = (gpointer *) s; LogReader *self = args[0]; LogProtoServer *proto = args[1]; PollEvents *poll_events = args[2]; if (self->io_job.working) { self->pending_proto = proto; self->pending_poll_events = poll_events; self->pending_proto_present = TRUE; return; } log_reader_stop_watches(self); log_reader_apply_proto_and_poll_events(self, proto, poll_events); log_reader_update_watches(self); }