summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2020-12-15 07:44:12 +0100
committerJürg Billeter <j@bitron.ch>2020-12-22 17:33:28 +0100
commit9068295c9a73197a5e49b9b83a8648850c0961af (patch)
treecf1b1a4bb43ff6c219f9c2839dc1613be80effe3
parent91368618e014b535b929a3e747610f941a1055cf (diff)
downloadbuildstream-9068295c9a73197a5e49b9b83a8648850c0961af.tar.gz
pipe hack
-rw-r--r--src/buildstream/_scheduler/jobs/job.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/buildstream/_scheduler/jobs/job.py b/src/buildstream/_scheduler/jobs/job.py
index c7e2624e6..7579d249c 100644
--- a/src/buildstream/_scheduler/jobs/job.py
+++ b/src/buildstream/_scheduler/jobs/job.py
@@ -145,10 +145,15 @@ class Job:
assert not self._terminated, "Attempted to start process which was already terminated"
# FIXME: remove this, this is not necessary when using asyncio
- self._pipe_r, pipe_w = multiprocessing.Pipe(duplex=False)
+ silence = self.action_name == "Cache-query"
+ if silence:
+ self._pipe_r = pipe_w = None
+ else:
+ self._pipe_r, pipe_w = multiprocessing.Pipe(duplex=False)
self._tries += 1
- self._parent_start_listening()
+ if not silence:
+ self._parent_start_listening()
# FIXME: remove the parent/child separation, it's not needed anymore.
self._child = self.create_child_job( # pylint: disable=assignment-from-no-return
@@ -350,7 +355,8 @@ class Job:
self._scheduler.job_completed(self, status)
# Force the deletion of the pipe and process objects to try and clean up FDs
- self._pipe_r.close()
+ if self._pipe_r:
+ self._pipe_r.close()
self._pipe_r = self._task = None
# _parent_process_pipe()
@@ -359,6 +365,8 @@ class Job:
# in the parent process.
#
def _parent_process_pipe(self):
+ if not self._pipe_r:
+ return
while self._pipe_r.poll():
try:
message = self._pipe_r.recv()
@@ -581,7 +589,8 @@ class ChildJob:
self._thread_id = None
return _ReturnCode.TERMINATED, None
finally:
- self._pipe_w.close()
+ if self._pipe_w:
+ self._pipe_w.close()
# terminate()
#
@@ -620,6 +629,8 @@ class ChildJob:
# is_silenced (bool) : Whether messages are silenced
#
def _child_message_handler(self, message, is_silenced):
+ if self.action_name == "Cache-query":
+ return
message.action_name = self.action_name
message.task_element_name = self._message_element_name