summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-03-09 21:46:17 -0800
committerZac Medico <zmedico@gentoo.org>2011-03-14 09:23:10 -0700
commit157382fae7b4b4c74a6f7ce319c602c269cc7e96 (patch)
treecceb7c5dc066497f37ce1d241d8773a7f55dcba6
parentc1fba51ccab868d05f48fcc40bc2c959c9385e76 (diff)
downloadportage-157382fae7b4b4c74a6f7ce319c602c269cc7e96.tar.gz
portage-157382fae7b4b4c74a6f7ce319c602c269cc7e96.tar.bz2
portage-157382fae7b4b4c74a6f7ce319c602c269cc7e96.zip
AbstractPollTask: log exceptional events
Previously, when AbstractPollTask receives a POLLERR or POLLNVAL event, it would silently cancel the task. Now it will generate a message like this: !!! SpawnProcess received strange poll event: 8 The message is displayed via a new _log_poll_exception method, which is overridden by AbstractEbuildProcess to log the message via elog. This might help diagnose reported cases of SIGTERM signals killing ebuild processes for no apparent reason: http://code.google.com/p/chromium-os/issues/detail?id=12968
-rw-r--r--pym/_emerge/AbstractEbuildProcess.py5
-rw-r--r--pym/_emerge/AbstractPollTask.py11
2 files changed, 15 insertions, 1 deletions
diff --git a/pym/_emerge/AbstractEbuildProcess.py b/pym/_emerge/AbstractEbuildProcess.py
index 601aafe0e..d7f31be28 100644
--- a/pym/_emerge/AbstractEbuildProcess.py
+++ b/pym/_emerge/AbstractEbuildProcess.py
@@ -228,6 +228,11 @@ class AbstractEbuildProcess(SpawnProcess):
self.scheduler.output(msg,
log_path=self.settings.get("PORTAGE_LOG_FILE"))
+ def _log_poll_exception(self, event):
+ self._elog("eerror",
+ ["%s received strange poll event: %s\n" % \
+ (self.__class__.__name__, event,)])
+
def _set_returncode(self, wait_retval):
SpawnProcess._set_returncode(self, wait_retval)
diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py
index 833ee3b4c..6cbf984b9 100644
--- a/pym/_emerge/AbstractPollTask.py
+++ b/pym/_emerge/AbstractPollTask.py
@@ -1,8 +1,10 @@
-# Copyright 1999-2010 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import array
+import logging
+from portage.util import writemsg_level
from _emerge.AsynchronousTask import AsynchronousTask
from _emerge.PollConstants import PollConstants
class AbstractPollTask(AsynchronousTask):
@@ -39,9 +41,16 @@ class AbstractPollTask(AsynchronousTask):
def _unregister(self):
raise NotImplementedError(self)
+ def _log_poll_exception(self, event):
+ writemsg_level(
+ "!!! %s received strange poll event: %s\n" % \
+ (self.__class__.__name__, event,),
+ level=logging.ERROR, noiselevel=-1)
+
def _unregister_if_appropriate(self, event):
if self._registered:
if event & self._exceptional_events:
+ self._log_poll_exception(event)
self._unregister()
self.cancel()
elif event & PollConstants.POLLHUP: