[Buildbot-devel] p4poller: SIGCHLD handler is not installed
Scott Lamb
slamb at slamb.org
Mon Apr 10 22:01:31 UTC 2006
Using Twisted 2.2.0 + buildbot 0.7.2 + in-progress 2wire p4 patches,
I get this message:
twistd.log.1:2006/04/07 16:52 PDT [-] spawnProcess called, but
the SIGCHLD handler is not installed. This probably means you have
not yet called reactor.run, or called reactor.run
(installSignalHandler=0). You will probably never see this process
finish, and it may become a zombie process.
on first call to getProcessOutput from p4poller.P4Source. And indeed,
_process_changes never seems to be called.
I added a few log.msg()s and found this:
2006/04/10 14:38 PDT [-] Starting application
...
2006/04/10 14:38 PDT [-] P4Poller
2006/04/10 14:38 PDT [-] checkp4
2006/04/10 14:38 PDT [-] spawnProcess called, but the SIGCHLD
handler is not installed. This probably means you have not yet called
reactor.
run, or called reactor.run(installSignalHandler=0). You will
probably never see this process finish, and it may become a zombie
process.
...
2006/04/10 14:38 PDT [-] Calling runReactorWithLogging
2006/04/10 14:38 PDT [-] Calling reactor.run
...so indeed it's the former case. It's calling spawnProcess before
starting the reactor.
Looks like the call tree is this (skipping some frames):
- twisted.scripts.twistd.runApp
-- twisted.scripts.twistd.startApplication
--- buildbot.changes.p4poller.P4Source.startService
---- twisted.internet.task.LoopingCall.start(..., now=True)
----- LoopingCall.__call__
------ P4Source._get_changes
------- twisted.internet.utils.getProcessOutput
-- twisted.application.app.runReactorWithLogging
I can work around this problem by sticking a reactor.callLater in
P4Source.startService to make it wait for the reactor to start before
looping. Do you think this is the best solution? I kind of wonder if
buildbot shouldn't be doing so much stuff before the reactor starts
up. Has this problem come up anywhere else?
--
Scott Lamb <http://www.slamb.org/>
More information about the devel
mailing list