From: Marc Fiuczynski Date: Thu, 14 Jun 2007 21:59:07 +0000 (+0000) Subject: Sapan's fix for hung init script processes X-Git-Tag: after-util-vserver-0_30_213-merge~6 X-Git-Url: http://git.onelab.eu/?p=util-vserver.git;a=commitdiff_plain;h=c8a6d235b30fa22308f7a857ba7aaea3f15ef3cc Sapan's fix for hung init script processes --- diff --git a/python/vserver.py b/python/vserver.py index 7e78134..aeb05d6 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -394,39 +394,18 @@ class VServer: # execute each init script in turn # XXX - we don't support all scripts that vserver script does - cmd_pid = 0 - first_child = True - for cmd in self.INITSCRIPTS + [None]: - # wait for previous command to terminate, unless it - # is the last one and the caller has specified to wait - if cmd_pid and (cmd != None or wait): - try: - os.waitpid(cmd_pid, 0) - except: - print >>log, "error waiting for %s:" % cmd_pid - traceback.print_exc() - - # end of list - if cmd == None: - os._exit(0) - - # fork and exec next command - cmd_pid = os.fork() - if cmd_pid == 0: - try: - # enter vserver context - self.__do_chcontext(state_file) - arg_subst = { 'runlevel': runlevel } - cmd_args = [cmd[0]] + map(lambda x: x % arg_subst, - cmd[1:]) - print >>log, "executing '%s'" % " ".join(cmd_args) - os.execl(cmd[0], *cmd_args) - except: - traceback.print_exc() - os._exit(1) - else: - # don't want to write state_file multiple times - state_file = None + self.__do_chcontext(state_file) + for cmd in self.INITSCRIPTS + [None]: + try: + # enter vserver context + arg_subst = { 'runlevel': runlevel } + cmd_args = [cmd[0]] + map(lambda x: x % arg_subst, + cmd[1:]) + print >>log, "executing '%s'" % " ".join(cmd_args) + os.spawnvp(os.P_WAIT,cmd[0],*cmd_args) + except: + traceback.print_exc() + os._exit(1) # we get here due to an exception in the top-level child process except Exception, ex: