Skip to content

Commit

Permalink
Force to close FIFO buffers instead of waiting for garbage collector
Browse files Browse the repository at this point in the history
Signed-off-by: Alexey Stepanov <penguinolog@gmail.com>
  • Loading branch information
penguinolog committed Oct 23, 2018
1 parent 9cacdf7 commit 25d29f6
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
10 changes: 10 additions & 0 deletions exec_helpers/subprocess_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,13 @@ def poll_stderr(): # type: () -> None
"""Sync stderr poll."""
result.read_stderr(src=stderr, log=logger, verbose=verbose)

def close_streams(): # type: () -> None
"""Enforce FIFO closure."""
if stdout is not None and not stdout.closed:
stdout.close()
if stderr is not None and not stderr.closed:
stderr.close()

# Store command with hidden data
cmd_for_log = self._mask_command(cmd=command, log_mask_re=log_mask_re)

Expand All @@ -189,6 +196,7 @@ def poll_stderr(): # type: () -> None
# Process closed?
if exit_code is not None:
result.exit_code = exit_code
close_streams()
return result
# Kill not ended process and wait for close
try:
Expand All @@ -205,6 +213,8 @@ def poll_stderr(): # type: () -> None
result.exit_code = exit_code
return result
raise # Some other error
finally:
close_streams()

wait_err_msg = _log_templates.CMD_WAIT_ERROR.format(result=result, timeout=timeout)
logger.debug(wait_err_msg)
Expand Down
4 changes: 4 additions & 0 deletions test/test_subprocess_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
class FakeFileStream(object):
def __init__(self, *args):
self.__src = list(args)
self.closed = False

def __iter__(self):
for _ in range(len(self.__src)):
Expand All @@ -50,6 +51,9 @@ def __iter__(self):
def fileno(self):
return hash(tuple(self.__src))

def close(self):
self.closed = True


# Subprocess extra arguments.
# Flags from:
Expand Down

0 comments on commit 25d29f6

Please sign in to comment.