static gboolean afprogram_dd_init(LogPipe *s) { AFProgramDestDriver *self = (AFProgramDestDriver *) s; GlobalConfig *cfg = log_pipe_get_config(s); if (!log_dest_driver_init_method(s)) return FALSE; log_writer_options_init(&self->writer_options, cfg, 0); if (!self->writer) self->writer = log_writer_new(LW_FORMAT_FILE); log_writer_set_options(self->writer, s, &self->writer_options, STATS_LEVEL0, SCS_PROGRAM, self->super.super.id, self->cmdline->str); log_writer_set_queue(self->writer, log_dest_driver_acquire_queue(&self->super, afprogram_dd_format_persist_name(self))); log_pipe_init((LogPipe *) self->writer, NULL); log_pipe_append(&self->super.super.super, (LogPipe *) self->writer); return afprogram_dd_reopen(self); }
static inline void afprogram_dd_store_reload_store_item(AFProgramDestDriver *self, GlobalConfig *cfg) { AFProgramReloadStoreItem *reload_info = g_new0(AFProgramReloadStoreItem, 1); reload_info->pid = self->pid; reload_info->writer = self->writer; cfg_persist_config_add(cfg, afprogram_dd_format_persist_name(self), reload_info, afprogram_reload_store_item_destroy_notify, FALSE); }
static gboolean afprogram_dd_restore_reload_store_item(AFProgramDestDriver *self, GlobalConfig *cfg) { const gchar *persist_name = afprogram_dd_format_persist_name((const LogPipe *)self); AFProgramReloadStoreItem *restored_info = (AFProgramReloadStoreItem *)cfg_persist_config_fetch(cfg, persist_name); if (restored_info) { self->process_info.pid = restored_info->pid; self->writer = restored_info->writer; child_manager_register(self->process_info.pid, afprogram_dd_exit, log_pipe_ref(&self->super.super.super), (GDestroyNotify)log_pipe_unref); g_free(restored_info); } return !!(self->writer); }