Changeset: dfe166a9c01b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/dfe166a9c01b
Modified Files:
        testing/Mtest.py.in
Branch: Mar2025
Log Message:

Use Python feature in Popen available since 3.11 instead of our own attempt.


diffs (123 lines):

diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -183,44 +183,6 @@ except ImportError:
             p += os.pathsep + os.environ['PYTHONPATH']
         os.environ['PYTHONPATH'] = p
 
-# Replace os.fork by a version that forks but also sets the process
-# group in the child.  This is done so that we can easily kill a
-# subprocess and its children in case of a timeout.
-# To use this, set the global variable setpgrp to True before calling
-# subprocess.Popen.  It is reset automatically to False so that
-# subprocess of our child don't get their own process group.
-try:
-    os.setpgrp
-except AttributeError:
-    try:
-        os.setpgid
-    except AttributeError:
-        # no function to set process group, so don't replace
-        pass
-    else:
-        # use os.setpgid to set process group
-        def myfork(osfork = os.fork):
-            global setpgrp
-            _setpgrp = setpgrp
-            setpgrp = False
-            pid = osfork()
-            if pid == 0 and _setpgrp:
-                os.setpgid(0, 0)
-            return pid
-        os.fork = myfork
-else:
-    # use os.setpgrp to set process group
-    def myfork(osfork = os.fork):
-        global setpgrp
-        _setpgrp = setpgrp
-        setpgrp = False
-        pid = osfork()
-        if pid == 0 and _setpgrp:
-            os.setpgrp()
-        return pid
-    os.fork = myfork
-setpgrp = False
-
 try:
     ttywidth = os.get_terminal_size(1).columns
 except:
@@ -1633,7 +1595,6 @@ def returnCode(proc, f = None):
     return None                 # no error
 
 def GetBitsAndModsAndThreads(env) :
-    global setpgrp
     rtrn = 0
     cmd = env['exe']['mserver5'].copy()
     dbpath = os.path.join(env['GDK_DBFARM'], TSTPREF)
@@ -1646,9 +1607,9 @@ def GetBitsAndModsAndThreads(env) :
     cmd.extend(mserver5_opts)
     if procdebug:
         print('GetBitsAndModsAndThreads: starting process "%s" (inpipe, 
outpipe, errpipe)\n' % '" "'.join(cmd))
-    setpgrp = True
     with process.Popen(cmd, stdin=process.PIPE, stdout=process.PIPE,
-                       stderr=process.PIPE, text=True) as proc:
+                       stderr=process.PIPE, text=True,
+                       process_group=0) as proc:
         stderr = proc.stderr
         proc.stdout = process._BufferedPipe(proc.stdout)
         proc.stderr = process._BufferedPipe(proc.stderr)
@@ -1866,7 +1827,6 @@ relcond = {
 }
 
 def RunTest(env, TST, COND, oktests, length, pSrvr, total_tests, 
test_progress, options) :
-    global setpgrp
     Failed = F_SKIP
     FailedOut = F_SKIP
     FailedErr = F_SKIP
@@ -2703,15 +2663,12 @@ class ServerClass:
                 self.lock.release()
 
     def LaunchIt(self):
-        global setpgrp
-
         self.outfile.flush()
         self.errfile.flush()
 
         cmd = self.cmd
         if procdebug:
             print('LaunchIt: starting process "%s" (inpipe)\n' % '" 
"'.join(cmd))
-        setpgrp = True
         stdin = open(os.devnull)
         stdout = self.outfile
         stderr = self.errfile
@@ -2734,7 +2691,7 @@ class ServerClass:
                                  
creationflags=process.CREATE_NEW_PROCESS_GROUP)
         else:
             proc = process.Popen(cmd, stdin=stdin, stdout=stdout,
-                                 stderr=stderr, text=True)
+                                 stderr=stderr, text=True, process_group=0)
         # maybe buffer output as it comes to avoid deadlock
         if stdout == process.PIPE:
             proc.stdout = process._BufferedPipe(proc.stdout)
@@ -2807,7 +2764,6 @@ class ServerClass:
 ### LaunchIt(cmd, TestIn, TestOut, TestErr, TimeOut, pollfile, port) #
 
 def RunIt(cmd, onechild, TestIn, TestOut, TestErr, TimeOut, pSrvr) :
-    global setpgrp
     if type(TestIn) is type(''):
         TestInput = TestIn
         TestIn = process.PIPE
@@ -2817,11 +2773,11 @@ def RunIt(cmd, onechild, TestIn, TestOut
     TestErr.flush()
     if procdebug:
         print('RunIt: starting process "%s"\n' % '" "'.join(cmd))
-    setpgrp = True
     if TimeOut:
         os.environ['TIMEOUT'] = str(TimeOut)
     with process.Popen(cmd, stdin=TestIn, stdout=TestOut,
-                       stderr=TestErr, text=True) as proc:
+                       stderr=TestErr, text=True,
+                       process_group=0) as proc:
         proc.killed = False
         proc.onechild = onechild
         try:
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to