[X2Go-Commits] pyhoca-gui.git - build-main (branch) updated: 0.4.0.8-19-g9394bb3

X2Go dev team git-admin at x2go.org
Wed Jan 8 15:22:04 CET 2014


The branch, build-main has been updated
       via  9394bb354a9dafb685a3f0caef642e011f463726 (commit)
      from  b9235e33ca5e7429607fe0b66ad395a444940147 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 debian/changelog |    1 +
 pyhoca-gui       |   62 ++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 47 insertions(+), 16 deletions(-)

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index 9a35bd8..3727545 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,6 +18,7 @@ pyhoca-gui (0.4.0.9-0~x2go1) UNRELEASED; urgency=low
     - Allow for full path taskbar icon names, resolve tilde char in icon file
       path.
     - Resolve tilde char in file path of the about image.
+    - Allow multiple PyHoca-GUI instances for the same user, one per $DISPLAY.
   * /debian/copyright:
     + Update file. Add entry for file icon2exe.py.
   * /debian/control:
diff --git a/pyhoca-gui b/pyhoca-gui
index 34f08b4..1697f86 100755
--- a/pyhoca-gui
+++ b/pyhoca-gui
@@ -24,6 +24,7 @@ modules ={}
 import sys
 import os
 import re
+import shutil
 PROG_NAME = os.path.basename(sys.argv[0]).replace('.exe', '')
 PROG_PID  = os.getpid()
 
@@ -138,25 +139,40 @@ VERSION: %s
 
 def check_running():
     if _X2GOCLIENT_OS  in ('Linux', 'Mac'):
+
         p = subprocess.Popen(['ps', '-U', _CURRENT_LOCAL_USER, '-u', _CURRENT_LOCAL_USER], stdout=subprocess.PIPE)
         psA_out = p.communicate()
         if psA_out[0].count(PROG_NAME) <= 1:
-            return False
-        else:
-            processes = psA_out[0].strip().strip('\n').strip().split('\n')
-            sep = re.compile('[\s]+')
-            processes_of_myself = [ sep.split(row) for row in processes if PROG_NAME in row and not str(PROG_PID) in row ]
-            print
-            print 'FIXME: We found at least one other PyHoca-GUI instance for this user,'
-            print 'but cannot (yet) tell if it/they is/are running on the same $DISPLAY'
-            print 'or some other $DISPLAY. PyHoca-GUI only allows one instance per $DISPLAY.'
-            print
-            print 'These are the other instances of PyHoca-GUI found for this user:'
-            for line in processes_of_myself:
-                print "    ".join(line)
-            # FIXME: add $DISPLAY check here, only return False if no PyHoca-GUI instance is running on this $DISPLAY
-            # return False
-        return True
+
+            if os.path.isdir(os.path.expanduser("~/.x2go/pyhoca-gui/")):
+                shutil.rmtree(os.path.expanduser("~/.x2go/pyhoca-gui/"))
+
+        my_pid = str(os.getpid())
+        if not os.path.exists(os.path.expanduser("~/.x2go/pyhoca-gui/")):
+            os.makedirs(os.path.expanduser("~/.x2go/pyhoca-gui/"))
+        my_pidfile = os.path.expanduser("~/.x2go/pyhoca-gui/display.{pid}".format(pid=my_pid))
+
+        my_display = os.environ['DISPLAY']
+        open(my_pidfile, 'w').write(my_display)
+
+        already_running_for_this_display = False
+        for pidfile in os.listdir(os.path.expanduser("~/.x2go/pyhoca-gui/")):
+
+            # this is our own pid file...
+            if my_pidfile.endswith(pidfile):
+                continue
+
+            display = open(os.path.expanduser("~/.x2go/pyhoca-gui/") + pidfile, 'r').read()
+
+            if display.split('.')[0] == my_display.split('.')[0]:
+                other_pid = pidfile.split('.')[1]
+                print
+                print('One instance of PyHoca-GUI (PID: {other_pid}) is already running for this $DISPLAY {display}'.format(other_pid=other_pid, display=my_display))
+
+                return True
+
+        return False
+
     elif _X2GOCLIENT_OS == 'Windows':
         import wmi
         w = wmi.WMI()
@@ -169,6 +185,8 @@ def check_running():
 def version():
     # print version text and exit
     sys.stderr.write ("%s\n" % VERSION_TEXT)
+    remove_pidfile()
+
     sys.exit(0)
 
 
@@ -180,6 +198,8 @@ def runtime_error(m, parser=None, exitcode=-1):
     if parser is not None:
         parser.print_usage()
     sys.stderr.write ("%s: error: %s\n" % (PROG_NAME, m))
+
+    remove_pidfile()
     sys.exit(exitcode)
 
 
@@ -272,6 +292,14 @@ portable_options = [
                   ]
 
 
+def remove_pidfile():
+
+    if _X2GOCLIENT_OS  in ('Linux', 'Mac'):
+        my_pid = str(os.getpid())
+        if os.path.exists(os.path.expanduser("~/.x2go/pyhoca-gui/display.{pid}".format(pid=my_pid))):
+            os.remove(os.path.expanduser("~/.x2go/pyhoca-gui/display.{pid}".format(pid=my_pid)))
+
+
 def parseargs():
 
     global DEBUG
@@ -389,6 +417,8 @@ def main():
             thisPyHocaGUI.WakeUpIdle()
             thisPyHocaGUI.ExitMainLoop()
 
+    remove_pidfile()
+
 if __name__ == '__main__':
     main()
 


hooks/post-receive
-- 
pyhoca-gui.git (Python X2Go Client (wxPython GUI))

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "pyhoca-gui.git" (Python X2Go Client (wxPython GUI)).




More information about the x2go-commits mailing list