From 9347bd4f24ae14f09cc17baa44a1df211bc06b90 Mon Sep 17 00:00:00 2001 From: lxnay Date: Fri, 10 Oct 2008 20:22:16 +0000 Subject: [PATCH] Entropy/entropyTools: - spawnFunction(): add the ability to provide a callback function to read the child pid id Entropy/Repository Manager: - make possible to stop any queued command that calls spawnFunction (85% of them) git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@2515 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- libraries/entropy.py | 47 ++++++++++++++++++++++++++++++--------- libraries/entropyTools.py | 17 +++++++------- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/libraries/entropy.py b/libraries/entropy.py index afe6ca4b7..97eea477a 100644 --- a/libraries/entropy.py +++ b/libraries/entropy.py @@ -4565,8 +4565,6 @@ class PackageInterface: header = red(" ## ") ) newidpackage = self._install_package_into_database() - # newidpackage = self.Entropy.entropyTools.spawnFunction( self._install_package_into_database ) - # ^^ it hangs on live systems! # remove old files and gentoo stuff if (self.infoDict['removeidpackage'] != -1): @@ -21370,7 +21368,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - switched = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + switched = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() rc = 1 @@ -21430,7 +21431,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - data = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + data = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return data @@ -21531,7 +21535,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - data = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + data = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return data @@ -21562,7 +21569,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - data = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + data = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return data @@ -21592,7 +21602,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - status, result = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + status, result = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() mystatus = False @@ -21630,7 +21643,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - mydata = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + mydata = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return mydata @@ -21665,7 +21681,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return True, 0 @@ -21749,7 +21768,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - data = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + data = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return data @@ -21864,7 +21886,10 @@ class SystemManagerExecutorServerRepositoryInterface: sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ - data = self.entropyTools.spawnFunction(myfunc) + def write_pid(pid): + self._set_processing_pid(queue_id, pid) + + data = self.entropyTools.spawnFunction(myfunc, write_pid_func = write_pid) stdout_err.close() return data diff --git a/libraries/entropyTools.py b/libraries/entropyTools.py index a88dcffb2..308a5f0ca 100644 --- a/libraries/entropyTools.py +++ b/libraries/entropyTools.py @@ -1554,14 +1554,13 @@ def compat_uncompressTarBz2(filepath, extractPath = None): def spawnFunction(f, *args, **kwds): - uid = None - gid = None - if kwds.has_key('spf_uid'): - uid = kwds['spf_uid'] - kwds.pop('spf_uid') - if kwds.has_key('spf_gid'): - gid = kwds['spf_gid'] - kwds.pop('spf_gid') + uid = kwds.get('spf_uid') + if uid != None: kwds.pop('spf_uid') + + gid = kwds.get('spf_gid') + if gid != None: kwds.pop('spf_gid') + + write_pid_func = kwds.get('write_pid_func') try: import cPickle as pickle @@ -1570,6 +1569,8 @@ def spawnFunction(f, *args, **kwds): pread, pwrite = os.pipe() pid = os.fork() if pid > 0: + if write_pid_func != None: + write_pid_func(pid) os.close(pwrite) f = os.fdopen(pread, 'rb') status, result = pickle.load(f)