X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvnamespace.c;h=d840fbb7460f4d51b4250ed42ebf2303cfa97193;hb=5817e191c23c4c53548472b5aa77a29d995c3410;hp=076b4e4b1351015dc80c058c5471edc17aa8b996;hpb=724ab5b8c85dd45b6ad3c682d402f554f862f549;p=util-vserver.git diff --git a/src/vnamespace.c b/src/vnamespace.c index 076b4e4..d840fbb 100644 --- a/src/vnamespace.c +++ b/src/vnamespace.c @@ -21,7 +21,7 @@ #endif #include "util.h" -#include +#include #include @@ -90,12 +90,24 @@ showVersion() static void newNamespace(void) { - int rc; + pid_t pid; - rc = sys_unshare(CLONE_NEWNS); - if (rc!=0) { - perror("vnamespace: unshare()"); - exit(wrapper_exit_code); + signal(SIGCHLD, SIG_DFL); + +#ifdef NDEBUG + pid = sys_clone(CLONE_NEWNS|CLONE_VFORK|SIGCHLD, 0); +#else + pid = sys_clone(CLONE_NEWNS|SIGCHLD, 0); +#endif + + switch (pid) { + case -1 : + perror("vnamespace: clone()"); + exit(wrapper_exit_code); + case 0 : + break; + default : + vc_exitLikeProcess(pid, wrapper_exit_code); } }