Such a change should not cause the entire client to fail.  Can you try
running the VenueClient from the command line and see what you get?

cd \program files\agtk-3\bin
venueclient3.py

Tom


On 4/23/07 10:14 AM, Nicolas Bertrand wrote:

   Hi Thomas,

   A fuller account of the symptoms.

   The machine was not displaying any incoming video streams. A problem noticed 
on a few other older dell optiplex machines. I shut down the venue client and 
copied the patch processmanager.py file (see attached) as the routine procedure 
when seeing that problem. The client does not launch anymore at all. :-s

   Nic



            "Thomas D. Uram" <tu...@mcs.anl.gov><mailto:tu...@mcs.anl.gov> 
04/23 3:42 pm >>>


   Hi Nic:

   The only problem I see is a failure to connect to the Jabber text service
   at one time last week, when there was a problem with the server, and
   an error using the AGSC bridge.

   Did you encounter some other problem?

   Tom


   On 4/23/07 4:16 AM, Nicolas Bertrand wrote:


      Hi,

      We are experiencing a problem launching the AG client on a winxp sp2 box. 
see attached logs.

      Any ideas?

      Nic

















     _____


   
#-----------------------------------------------------------------------------
   # Name:        ProcessManager.py
   # Purpose:
   # Created:     2003/08/02
   # RCS-ID:      $Id: ProcessManager.py,v 1.11 2006/05/10 20:34:14 turam Exp $
   # Copyright:   (c) 2002-2003
   # Licence:     See COPYING.txt
   
#-----------------------------------------------------------------------------
   """
   """
   __revision__ = "$Id: ProcessManager.py,v 1.11 2006/05/10 20:34:14 turam Exp 
$"

   import win32api
   import win32con
   import win32event
   import win32process
   from AccessGrid import Log

   log = Log.GetLogger(Log.ProcessManager)

   class ProcessManager:
       def __init__(self):
           self.processes = []
           self.threadid = dict()

       def WaitForChildren(self,callback):
           log.warn('ProcessManager callback not yet implemented on Windows')

       def StartProcess(self, command, arglist, detached = 1, maxWait = 20):
           """
           Start a new process.

           @param command : the name of the command to be started. It can
           either be a full pathname or a command name to be found on the
           default path.

           @param arglist : is a list of the arguments to the command.

           @param detached : a flag indicating whether this process
           should be run detached or the process manager should wait for
           it to complete execution to return.

           @type command: string
           @type arglist: list of strings
           @type detached: integer
           """
           if command.find(" ") != -1:
                command = '"' + command + '"'
           cmdline = command
           for arg in arglist:
               arg = str(arg)
               if arg.find(" ") != -1:
                   #
                   # If there are spaces, quote the arg
                   #
                   arg = '"' + arg + '"'

               cmdline += " " + arg

           try:

               startup_info = win32process.STARTUPINFO()

               log.debug("Creating process: %s", cmdline)

               info = win32process.CreateProcess(
                   None,                   # AppName
                   cmdline,                # Command line
                   None,                   # Process security
                   None,                   # Thread security
                   0,                      # Inherit handles?
                   win32con.NORMAL_PRIORITY_CLASS|win32con.CREATE_NO_WINDOW,
                   None,                   # New environment
                   None,                   # Current directory
                   startup_info)

               log.debug("Create process returns: %s", info)

               pHandle = info[0]

               self.processes.append(pHandle)
               self.threadid[pHandle] = info[3]

               if not detached:
                   pHandle = info[0]
                   wTime = 0
                   tIncr = 1
                   # We have to wait for it to finish
                   exitCode = win32process.GetExitCodeProcess(pHandle)
                   while exitCode == 259 and wTime < maxWait:
                       exitCode = win32process.GetExitCodeProcess(pHandle)
                       time.sleep(tIncr)
                       wTime = wTime + tIncr
                   else:
                       # Gotta kill it, sigh
                       self.TerminateProcess(pHandle)
                   retval = exitCode
               else:
                   retval = pHandle

           except win32process.error, e:
               log.exception("process creation failed: %s", e)
               retval = None

           return retval

       def TerminateAllProcesses(self):
           """
           Cleanly shutdown all processes this manager has created.
           """
           # Use a copy of the process list
           processList = self.processes[:]

           for phandle in processList:
               try:
                   self.TerminateProcess(phandle)
               except Exception, e:
                   log.exception("couldn't terminate process %s: %s", phandle, 
e)

           self.processes = []
           self.threadid = dict()

       def TerminateProcess(self, pid):
           """
           Cleanly shutdown the specified process this manager has created.

           @param pid: the id of the process to terminate.
           @type pid: string? integer?
           """
           terminated = 0
           try:
               ret = 0
               win32api.PostThreadMessage(self.threadid[pid], 18, 0, 0)
               ret = win32event.WaitForSingleObject(pid, 500 )
               if ret == win32event.WAIT_OBJECT_0:
                   terminated = 1
               else:
                   log.warn("Couldn't terminate process %s cleanly (%s)", pid, 
str(ret))
           except win32process.error,e:
               log.exception("couldn't shutdown process %s: %s", pid, e)

           if not terminated:
               try:
                   win32process.TerminateProcess(pid, 0)
                   self.processes.remove(pid)
               except win32process.error, e:
                   log.exception("couldn't terminate process %s: %s", pid, e)

           del self.threadid[pid]

       def KillAllProcesses(self):
           """
           Kill all processes this manager has created.

           @warning: this is not a clean shutdown, but a forced shutdown
           that may result in system cruft.
           """
           # Placeholder to remind implementor
           # to operate on a copy of the list
           # to avoid skipping procs
           #processList = self.processes[:]
           self.TerminateAllProcesses()

       def KillProcess(self, pid):
           """
           Kill a single process this manager has created.

           @warning: this is not a clean shutdown, but a forced shutdown
           that may result in system cruft.

           @param pid: the id of the process to terminate.
           @type pid: string? integer?
           """
           self.TerminateProcess(pid)

       def ListProcesses(self):
           """
           Return a list of process id's for this process manager.
           @returns: a list of process id's
           """
           return self.processes

   if __name__ == "__main__":
       import time
       mgr = ProcessManager()

       try:
           mgr.StartProcess("notepad", [r"\boot.ini"])
       except Exception, e:
           print "Exception starting process: ", e

       try:
           print mgr.ListProcesses()
       except Exception, e:
           print "Exception listing processes: ", e

       time.sleep(5)

       try:
           mgr.TerminateAllProcesses()
       except Exception, e:
           print "Exception terminating processes: ", e

       try:
           mgr.StartProcess("notepad", [r"\boot.ini"], detached = 0)
       except Exception, e:
           print "Exception with non-detached process: ", e



Reply via email to