]> git.ipfire.org Git - pakfire.git/commitdiff
daemon: Register any workers
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Aug 2024 19:36:31 +0000 (19:36 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Aug 2024 19:36:31 +0000 (19:36 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/daemon.c

index 3887a042ebe7dde70f15d9443f31a4c39703a09a..beca68728ca6eef95b275c3116174b2c0dbb776f 100644 (file)
@@ -30,6 +30,8 @@
 #include <pakfire/util.h>
 #include <pakfire/worker.h>
 
+#define MAX_WORKERS 64
+
 struct pakfire_daemon {
        struct pakfire_ctx* ctx;
        int nrefs;
@@ -43,6 +45,10 @@ struct pakfire_daemon {
        // Connection Timer and Holdoff Time
        sd_event_source* connect_timer;
        unsigned int reconnect_holdoff;
+
+       // Workers
+       struct pakfire_worker* workers[MAX_WORKERS];
+       unsigned int running_workers;
 };
 
 static int pakfire_daemon_terminate(sd_event_source* source,
@@ -74,12 +80,27 @@ static int pakfire_daemon_job(struct pakfire_daemon* daemon, json_object* m) {
        if (r) {
                CTX_ERROR(daemon->ctx, "Could not create a new worker: %s\n", strerror(-r));
 
-               return r;
+               goto ERROR;
+       }
+
+       // Store the new worker
+       for (unsigned int i = 0; i < MAX_WORKERS; i++) {
+               if (!daemon->workers[i]) {
+                       daemon->workers[i] = pakfire_worker_ref(worker);
+                       break;
+               }
        }
 
+       // Increment the number of running workers
+       daemon->running_workers++;
+
        // XXX TODO We need to do something with the new worker
 
-       return 0;
+ERROR:
+       if (worker)
+               pakfire_worker_unref(worker);
+
+       return r;
 }
 
 static int pakfire_daemon_recv(struct pakfire_xfer* xfer,