gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnurl] 163/264: tests: fix conflict between Cygwin/msys and Windows PID


From: gnunet
Subject: [gnurl] 163/264: tests: fix conflict between Cygwin/msys and Windows PIDs
Date: Thu, 30 Apr 2020 16:07:46 +0200

This is an automated email from the git hooks/post-receive script.

nikita pushed a commit to branch master
in repository gnurl.

commit 3f60a9e995c851a1dff2439cb16407d86cde7754
Author: Marc Hoersken <address@hidden>
AuthorDate: Sun Apr 5 19:18:09 2020 +0200

    tests: fix conflict between Cygwin/msys and Windows PIDs
    
    Add 65536 to Windows PIDs to allow Windows specific treatment
    by having disjunct ranges for Cygwin/msys and Windows PIDs.
    
    See also:
    - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
      h=b5e1003722cb14235c4f166be72c09acdffc62ea
    - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
      h=448cf5aa4b429d5a9cebf92a0da4ab4b5b6d23fe
    
    Replaces #5178
    Closes #5188
---
 tests/dictserver.py      | 11 ++++++--
 tests/ftp.pm             | 72 +++++++++++++++++++++++++++++-------------------
 tests/negtelnetserver.py |  9 +++++-
 tests/server/util.c      |  9 ++++++
 tests/smbserver.py       | 11 ++++++--
 5 files changed, 79 insertions(+), 33 deletions(-)

diff --git a/tests/dictserver.py b/tests/dictserver.py
index 3211318c5..5641692d9 100755
--- a/tests/dictserver.py
+++ b/tests/dictserver.py
@@ -51,8 +51,11 @@ def dictserver(options):
     """
     if options.pidfile:
         pid = os.getpid()
+        # see tests/server/util.c function write_pidfile
+        if os.name == "nt":
+            pid += 65536
         with open(options.pidfile, "w") as f:
-            f.write("{0}".format(pid))
+            f.write(str(pid))
 
     local_bind = (options.host, options.port)
     log.info("[DICT] Listening on %s", local_bind)
@@ -85,7 +88,11 @@ class DictHandler(socketserver.BaseRequestHandler):
             if VERIFIED_REQ in data:
                 log.debug("[DICT] Received verification request from test "
                           "framework")
-                response_data = VERIFIED_RSP.format(pid=os.getpid())
+                pid = os.getpid()
+                # see tests/server/util.c function write_pidfile
+                if os.name == "nt":
+                    pid += 65536
+                response_data = VERIFIED_RSP.format(pid=pid)
             else:
                 log.debug("[DICT] Received normal request")
                 response_data = "No matches"
diff --git a/tests/ftp.pm b/tests/ftp.pm
index 5e92ce7f9..a29fad14f 100644
--- a/tests/ftp.pm
+++ b/tests/ftp.pm
@@ -42,6 +42,10 @@ use serverhelp qw(
     datasockf_pidfilename
     );
 
+use pathhelp qw(
+    os_is_win
+    );
+
 #######################################################################
 # portable_sleep uses Time::HiRes::sleep if available and falls back
 # to the classic approach of using select(undef, undef, undef, ...).
@@ -55,7 +59,7 @@ sub portable_sleep {
     if($Time::HiRes::VERSION) {
         Time::HiRes::sleep($seconds);
     }
-    elsif ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys') {
+    elsif (os_is_win()) {
         Win32::Sleep($seconds*1000);
     }
     else {
@@ -91,19 +95,23 @@ sub pidexists {
     my $pid = $_[0];
 
     if($pid > 0) {
+        # verify if currently existing Windows process
+        if ($pid > 65536 && os_is_win()) {
+            $pid -= 65536;
+            if($^O ne 'MSWin32') {
+                my $filter = "PID eq $pid";
+                my $result = `tasklist -fi \"$filter\" 2>nul`;
+                if(index($result, "$pid") != -1) {
+                    return -$pid;
+                }
+                return 0;
+            }
+        }
+
         # verify if currently existing and alive
         if(kill(0, $pid)) {
             return $pid;
         }
-
-        # verify if currently existing Windows process
-        if($^O eq "msys") {
-            my $filter = "PID eq $pid";
-            my $result = `tasklist -fi \"$filter\" 2>nul`;
-            if(index($result, "$pid") != -1) {
-                return -$pid;
-            }
-        }
     }
 
     return 0;
@@ -116,17 +124,21 @@ sub pidterm {
     my $pid = $_[0];
 
     if($pid > 0) {
-        # signal the process to terminate
-        kill("TERM", $pid);
-
         # request the process to quit
-        if($^O eq "msys") {
-            my $filter = "PID eq $pid";
-            my $result = `tasklist -fi \"$filter\" 2>nul`;
-            if(index($result, "$pid") != -1) {
-                system("taskkill -fi \"$filter\" >nul 2>&1");
+        if ($pid > 65536 && os_is_win()) {
+            $pid -= 65536;
+            if($^O ne 'MSWin32') {
+                my $filter = "PID eq $pid";
+                my $result = `tasklist -fi \"$filter\" 2>nul`;
+                if(index($result, "$pid") != -1) {
+                    system("taskkill -fi \"$filter\" >nul 2>&1");
+                }
+                return;
             }
         }
+
+        # signal the process to terminate
+        kill("TERM", $pid);
     }
 }
 
@@ -137,19 +149,23 @@ sub pidkill {
     my $pid = $_[0];
 
     if($pid > 0) {
-        # signal the process to terminate
-        kill("KILL", $pid);
-
         # request the process to quit
-        if($^O eq "msys") {
-            my $filter = "PID eq $pid";
-            my $result = `tasklist -fi \"$filter\" 2>nul`;
-            if(index($result, "$pid") != -1) {
-                system("taskkill -f -fi \"$filter\" >nul 2>&1");
-                # Windows XP Home compatibility
-                system("tskill $pid >nul 2>&1");
+        if ($pid > 65536 && os_is_win()) {
+            $pid -= 65536;
+            if($^O ne 'MSWin32') {
+                my $filter = "PID eq $pid";
+                my $result = `tasklist -fi \"$filter\" 2>nul`;
+                if(index($result, "$pid") != -1) {
+                    system("taskkill -f -fi \"$filter\" >nul 2>&1");
+                    # Windows XP Home compatibility
+                    system("tskill $pid >nul 2>&1");
+                }
+                return;
             }
         }
+
+        # signal the process to terminate
+        kill("KILL", $pid);
     }
 }
 
diff --git a/tests/negtelnetserver.py b/tests/negtelnetserver.py
index 1efc64b56..7171092af 100755
--- a/tests/negtelnetserver.py
+++ b/tests/negtelnetserver.py
@@ -49,6 +49,9 @@ def telnetserver(options):
     """
     if options.pidfile:
         pid = os.getpid()
+        # see tests/server/util.c function write_pidfile
+        if os.name == "nt":
+            pid += 65536
         with open(options.pidfile, "w") as f:
             f.write(str(pid))
 
@@ -86,7 +89,11 @@ class 
NegotiatingTelnetHandler(socketserver.BaseRequestHandler):
 
             if VERIFIED_REQ.encode('utf-8') in data:
                 log.debug("Received verification request from test framework")
-                response = VERIFIED_RSP.format(pid=os.getpid())
+                pid = os.getpid()
+                # see tests/server/util.c function write_pidfile
+                if os.name == "nt":
+                    pid += 65536
+                response = VERIFIED_RSP.format(pid=pid)
                 response_data = response.encode('utf-8')
             else:
                 log.debug("Received normal request - echoing back")
diff --git a/tests/server/util.c b/tests/server/util.c
index 263f0cece..fa3d45118 100644
--- a/tests/server/util.c
+++ b/tests/server/util.c
@@ -269,6 +269,15 @@ int write_pidfile(const char *filename)
     logmsg("Couldn't write pid file: %s %s", filename, strerror(errno));
     return 0; /* fail */
   }
+#if defined(WIN32) || defined(_WIN32)
+  /* store pid + 65536 to avoid conflict with Cygwin/msys PIDs, see also:
+   * - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
+   *   h=b5e1003722cb14235c4f166be72c09acdffc62ea
+   * - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
+   *   h=448cf5aa4b429d5a9cebf92a0da4ab4b5b6d23fe
+   */
+  pid += 65536;
+#endif
   fprintf(pidfile, "%ld\n", pid);
   fclose(pidfile);
   logmsg("Wrote pid %ld to %s", pid, filename);
diff --git a/tests/smbserver.py b/tests/smbserver.py
index d320fb21e..30caa04b7 100755
--- a/tests/smbserver.py
+++ b/tests/smbserver.py
@@ -61,8 +61,11 @@ def smbserver(options):
     """
     if options.pidfile:
         pid = os.getpid()
+        # see tests/server/util.c function write_pidfile
+        if os.name == "nt":
+            pid += 65536
         with open(options.pidfile, "w") as f:
-            f.write("{0}".format(pid))
+            f.write(str(pid))
 
     # Here we write a mini config for the server
     smb_config = configparser.ConfigParser()
@@ -267,7 +270,11 @@ class TestSmbServer(imp_smbserver.SMBSERVER):
 
         if requested_filename == VERIFIED_REQ:
             log.debug("[SMB] Verifying server is alive")
-            contents = VERIFIED_RSP.format(pid=os.getpid()).encode('utf-8')
+            pid = os.getpid()
+            # see tests/server/util.c function write_pidfile
+            if os.name == "nt":
+                pid += 65536
+            contents = VERIFIED_RSP.format(pid=pid).encode('utf-8')
 
         self.write_to_fid(fid, contents)
         return fid, filename

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]