AsynchronousLock: use process by default
authorZac Medico <zmedico@gentoo.org>
Thu, 13 Jan 2011 14:14:18 +0000 (06:14 -0800)
committerZac Medico <zmedico@gentoo.org>
Thu, 13 Jan 2011 14:14:18 +0000 (06:14 -0800)
The default behavior is to use a process instead of a thread, since
there is currently no way to interrupt a thread that is waiting for
a lock (notably, SIGINT doesn't work because python delivers all
signals to the main thread).

pym/_emerge/AsynchronousLock.py

index fe9d3621014e99688f247879b3131c40c740b08f..863c88b6ab05f5bbf63f292fb753b9643a48ac03 100644 (file)
@@ -23,12 +23,19 @@ class AsynchronousLock(AsynchronousTask):
        """
        This uses the portage.locks module to acquire a lock asynchronously,
        using either a thread (if available) or a subprocess.
+
+       The default behavior is to use a process instead of a thread, since
+       there is currently no way to interrupt a thread that is waiting for
+       a lock (notably, SIGINT doesn't work because python delivers all
+       signals to the main thread).
        """
 
        __slots__ = ('path', 'scheduler',) + \
                ('_imp', '_force_async', '_force_dummy', '_force_process', \
                '_force_thread', '_waiting')
 
+       _use_process_by_default = True
+
        def _start(self):
 
                if not self._force_async:
@@ -43,7 +50,8 @@ class AsynchronousLock(AsynchronousTask):
                                return
 
                if self._force_process or \
-                       (not self._force_thread and threading is dummy_threading):
+                       (not self._force_thread and \
+                       (self._use_process_by_default or threading is dummy_threading)):
                        self._imp = _LockProcess(path=self.path, scheduler=self.scheduler)
                else:
                        self._imp = _LockThread(path=self.path,