summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkgmgr-server.c51
1 files changed, 27 insertions, 24 deletions
diff --git a/src/pkgmgr-server.c b/src/pkgmgr-server.c
index cff9a0a..0f07373 100644
--- a/src/pkgmgr-server.c
+++ b/src/pkgmgr-server.c
@@ -192,34 +192,37 @@ static gboolean __signal_handler(GIOChannel *io, GIOCondition cond,
return TRUE;
}
- pid = waitpid(-1, &status, WNOHANG);
- job = (struct backend_job *)g_hash_table_lookup(backend_info_table,
- (gconstpointer)pid);
- if (job == NULL) {
- ERR("Unknown child exit");
- return -1;
- }
+ while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
+ job = (struct backend_job *)g_hash_table_lookup(
+ backend_info_table, (gconstpointer)pid);
+ if (job == NULL) {
+ ERR("Unknown child exit");
+ continue;
+ }
- __set_backend_free(job->backend_slot);
- if (WIFSIGNALED(status)) {
- _send_fail_signal(job);
- DBG("backend[%s][%d] exit with signal[%d]", job->backend_type,
- pid, WTERMSIG(status));
- } else if (WEXITSTATUS(status)) {
- DBG("backend[%s][%d] exit with error", job->backend_type, pid);
- } else {
- DBG("backend[%s][%d] exit", job->backend_type, pid);
- }
+ __set_backend_free(job->backend_slot);
+ if (WIFSIGNALED(status)) {
+ _send_fail_signal(job);
+ INFO("backend[%s][%d] exit with signal[%d]",
+ job->backend_type, pid, WTERMSIG(status));
+ } else if (WEXITSTATUS(status)) {
+ INFO("backend[%s][%d] exit with error",
+ job->backend_type, pid);
+ } else {
+ INFO("backend[%s][%d] exit", job->backend_type, pid);
+ }
- if (job->extra) {
- if (job->extra->getsize_fifo) {
- ERR("invalid backend close");
- _return_value_to_caller(job->req_id,
- g_variant_new("(ix)", PKGMGR_R_ERROR, -1));
+ if (job->extra) {
+ if (job->extra->getsize_fifo) {
+ ERR("invalid backend close");
+ _return_value_to_caller(job->req_id,
+ g_variant_new("(ix)", PKGMGR_R_ERROR,
+ -1));
+ }
}
- }
- g_hash_table_remove(backend_info_table, (gconstpointer)pid);
+ g_hash_table_remove(backend_info_table, (gconstpointer)pid);
+ }
g_idle_add(queue_job, NULL);
return TRUE;