aboutsummaryrefslogtreecommitdiffstats
path: root/src/dumm/dumm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dumm/dumm.c')
-rw-r--r--src/dumm/dumm.c37
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 */
}