]> git.ipfire.org Git - pakfire.git/commitdiff
worker: Fetch the daemon's event loop
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Oct 2024 15:53:59 +0000 (15:53 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Oct 2024 15:53:59 +0000 (15:53 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/daemon.c
src/libpakfire/include/pakfire/daemon.h
src/libpakfire/worker.c

index 30aaf80079020baa8d162284c9b9945bac72c4ca..5bf010f14886bddb1d6e8a88c7390424028d8d65 100644 (file)
@@ -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.
 */
index b49d2bf065ce95c363586050b887f6d69bae95fd..b2e11d843c7aaab7ea68ec83a9fb37e109d7ef14 100644 (file)
@@ -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(
index 2f86e96efd6a8e5d3b8309012abe51c4a454122e..f2f1626e7de2cd60fe091d410c11fbd68c4d9338 100644 (file)
@@ -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;