From: Michael Tremer Date: Fri, 4 Oct 2024 15:53:59 +0000 (+0000) Subject: worker: Fetch the daemon's event loop X-Git-Tag: 0.9.30~1175 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a1e515d112f41ab7224dfb80fdcf2ca5ae9571e;p=pakfire.git worker: Fetch the daemon's event loop Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/daemon.c b/src/libpakfire/daemon.c index 30aaf8007..5bf010f14 100644 --- a/src/libpakfire/daemon.c +++ b/src/libpakfire/daemon.c @@ -719,7 +719,11 @@ struct pakfire_daemon* pakfire_daemon_unref(struct pakfire_daemon* daemon) { return NULL; } -static int pakfire_daemon_loop(struct pakfire_daemon* daemon) { +sd_event* pakfire_daemon_loop(struct pakfire_daemon* daemon) { + return sd_event_ref(daemon->loop); +} + +int pakfire_daemon_main(struct pakfire_daemon* daemon) { int r; // We are now ready @@ -743,10 +747,6 @@ ERROR: return 1; } -int pakfire_daemon_main(struct pakfire_daemon* daemon) { - return pakfire_daemon_loop(daemon); -} - /* Called after a new worker has been launched to register with the daemon's event loop. */ diff --git a/src/libpakfire/include/pakfire/daemon.h b/src/libpakfire/include/pakfire/daemon.h index b49d2bf06..b2e11d843 100644 --- a/src/libpakfire/include/pakfire/daemon.h +++ b/src/libpakfire/include/pakfire/daemon.h @@ -33,6 +33,8 @@ int pakfire_daemon_create(struct pakfire_daemon** daemon, struct pakfire_ctx* ct struct pakfire_daemon* pakfire_daemon_ref(struct pakfire_daemon* daemon); struct pakfire_daemon* pakfire_daemon_unref(struct pakfire_daemon* daemon); +sd_event* pakfire_daemon_loop(struct pakfire_daemon* daemon); + int pakfire_daemon_main(struct pakfire_daemon* daemon); int pakfire_daemon_worker_launched( diff --git a/src/libpakfire/worker.c b/src/libpakfire/worker.c index 2f86e96ef..f2f1626e7 100644 --- a/src/libpakfire/worker.c +++ b/src/libpakfire/worker.c @@ -42,6 +42,9 @@ struct pakfire_worker { struct pakfire_daemon* daemon; + // Event Loop + sd_event* loop; + uuid_t job_id; char name[NAME_MAX]; @@ -221,6 +224,8 @@ static int pakfire_parse_job(struct pakfire_worker* worker, json_object* data) { } static void pakfire_worker_free(struct pakfire_worker* worker) { + if (worker->loop) + sd_event_unref(worker->loop); if (worker->daemon) pakfire_daemon_unref(worker->daemon); if (worker->ctx) @@ -344,6 +349,14 @@ int pakfire_worker_create(struct pakfire_worker** worker, struct pakfire_ctx* ct // Store a reference to the daemon w->daemon = pakfire_daemon_ref(daemon); + // Fetch a reference to the event loop + w->loop = pakfire_daemon_loop(daemon); + if (!w->loop) { + CTX_ERROR(w->ctx, "Could not fetch the event loop: %m\n"); + r = -errno; + goto ERROR; + } + // Initialize the PID file descriptor w->pidfd = -1;