diff -NurpP --minimal linux-2.6.11.7-vs2.0-pre2/include/linux/vserver/signal.h linux-2.6.11.7-vs2.0-pre2-wait/include/linux/vserver/signal.h --- linux-2.6.11.7-vs2.0-pre2/include/linux/vserver/signal.h 2005-04-23 02:25:23.000000000 +0200 +++ linux-2.6.11.7-vs2.0-pre2-wait/include/linux/vserver/signal.h 2005-04-23 02:53:30.000000000 +0200 @@ -21,6 +21,7 @@ struct vcmd_wait_exit_v0 { #ifdef __KERNEL__ extern int vc_ctx_kill(uint32_t, void __user *); +extern void __wake_vx_exit(struct vx_info *vxi); extern int vc_wait_exit(uint32_t, void __user *); #endif /* __KERNEL__ */ diff -NurpP --minimal linux-2.6.11.7-vs2.0-pre2/kernel/vserver/context.c linux-2.6.11.7-vs2.0-pre2-wait/kernel/vserver/context.c --- linux-2.6.11.7-vs2.0-pre2/kernel/vserver/context.c 2005-04-23 02:25:24.000000000 +0200 +++ linux-2.6.11.7-vs2.0-pre2-wait/kernel/vserver/context.c 2005-04-23 02:54:38.000000000 +0200 @@ -391,6 +391,7 @@ void unhash_vx_info(struct vx_info *vxi) spin_lock(&vx_info_hash_lock); __unhash_vx_info(vxi); spin_unlock(&vx_info_hash_lock); + __wakeup_vx_exit(vxi); } diff -NurpP --minimal linux-2.6.11.7-vs2.0-pre2/kernel/vserver/signal.c linux-2.6.11.7-vs2.0-pre2-wait/kernel/vserver/signal.c --- linux-2.6.11.7-vs2.0-pre2/kernel/vserver/signal.c 2005-04-23 02:25:24.000000000 +0200 +++ linux-2.6.11.7-vs2.0-pre2-wait/kernel/vserver/signal.c 2005-04-23 02:53:35.000000000 +0200 @@ -89,6 +89,11 @@ int vc_ctx_kill(uint32_t id, void __user return retval; } +void __wakeup_vx_exit(struct vx_info *vxi) +{ + vxi->vx_state = VXS_DEFUNCT; + wake_up_interruptible(&vxi->vx_exit); +} static int __wait_exit(struct vx_info *vxi) {