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
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.
*/
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(
struct pakfire_daemon* daemon;
+ // Event Loop
+ sd_event* loop;
+
uuid_t job_id;
char name[NAME_MAX];
}
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)
// 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;