diff options
Diffstat (limited to 'src/dumm/dumm.c')
-rw-r--r-- | src/dumm/dumm.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/dumm/dumm.c b/src/dumm/dumm.c index 486e8d380..32462845b 100644 --- a/src/dumm/dumm.c +++ b/src/dumm/dumm.c @@ -96,25 +96,25 @@ static iterator_t* create_bridge_iterator(private_dumm_t *this) */ void signal_handler(int sig, siginfo_t *info, void *ucontext) { - private_dumm_t *this; - guest_t *guest; - iterator_t *iterator, *guests; - if (sig == SIGCHLD) { - iterator = instances->create_iterator(instances, TRUE); - while (iterator->iterate(iterator, (void**)&this)) + switch (info->si_code) { - if (this->destroying) - { - continue; - } - switch (info->si_code) + case CLD_EXITED: + case CLD_KILLED: + case CLD_DUMPED: { - case CLD_EXITED: - case CLD_KILLED: - case CLD_DUMPED: + private_dumm_t *this; + guest_t *guest; + iterator_t *iterator, *guests; + + iterator = instances->create_iterator(instances, TRUE); + while (iterator->iterate(iterator, (void**)&this)) { + if (this->destroying) + { + continue; + } guests = this->guests->create_iterator(this->guests, TRUE); while (guests->iterate(guests, (void**)&guest)) { @@ -125,13 +125,14 @@ void signal_handler(int sig, siginfo_t *info, void *ucontext) } } guests->destroy(guests); - break; } - default: - break; + iterator->destroy(iterator); + break; } + default: + break; } - iterator->destroy(iterator); + } /* SIGHUP is currently just ignored */ } |