sd_event* loop;
int flags;
- // Exit Code
- int exit;
-
// PID (of the child)
pid_t pid;
int pidfd;
static int pakfire_jail_exited(sd_event_source* source, const siginfo_t* si, void* data) {
struct pakfire_jail_exec* ctx = data;
struct pakfire_jail* jail = ctx->jail;
+ int r = 0;
switch (si->si_code) {
case CLD_EXITED:
DEBUG(jail->ctx, "Process has exited with status code %d\n", si->si_status);
// Store the exit code
- ctx->exit = si->si_status;
+ r = si->si_status;
break;
case CLD_KILLED:
ERROR(jail->ctx, "Process has been killed by signal %d\n", si->si_signo);
// Store the exit code
- ctx->exit = 139;
+ r = 139;
break;
case CLD_DUMPED:
si->si_status);
// Store the exit code
- ctx->exit = 128 + si->si_status;
+ r = 128 + si->si_status;
break;
}
// Terminate the event loop
- return sd_event_exit(ctx->loop, 0);
+ return sd_event_exit(ctx->loop, r);
}
struct pakfire_jail_command {
// Callback & Data
.callback = callback,
.data = data,
-
- // Exit Code
- .exit = -1,
};
DEBUG(jail->ctx, "Executing jail...\n");
goto ERROR;
}
- // Return the exit code
- r = ctx.exit;
-
ERROR:
// Destroy the temporary cgroup (if any)
if (ctx.cgroup) {