From 1045dddb46f8167028e590a8c96b94cc139a9e3c Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 29 May 2023 17:42:12 +0200 Subject: [PATCH] memoize stdin/stdout/stderr fds --- k8s_gitlab_borg/__main__.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/k8s_gitlab_borg/__main__.py b/k8s_gitlab_borg/__main__.py index d731dd4..8f87cbe 100644 --- a/k8s_gitlab_borg/__main__.py +++ b/k8s_gitlab_borg/__main__.py @@ -465,9 +465,12 @@ def main(): stdout_logger = proc_logger.getChild("stdout") stderr_logger = proc_logger.getChild("stderr") - os.set_blocking(proc.stdin.fileno(), False) - os.set_blocking(proc.stdout.fileno(), False) - os.set_blocking(proc.stderr.fileno(), False) + stdin_fd = proc.stdin.fileno() + stdout_fd = proc.stdout.fileno() + stderr_fd = proc.stderr.fileno() + os.set_blocking(stdin_fd, False) + os.set_blocking(stdout_fd, False) + os.set_blocking(stderr_fd, False) poll = select.poll() poll.register( @@ -493,7 +496,7 @@ def main(): for rfd, event in events: # logger.debug("rfd=%d, event=%x", rfd, event) if event & select.POLLOUT: - if rfd == proc.stdin.fileno(): + if rfd == stdin_fd: if chunk := pipe_buffer[:PIPE_BUF]: # logger.debug( # "Writing chunk of length %d...", len(chunk) @@ -510,7 +513,7 @@ def main(): else: proc.stdin.close() if event & select.POLLIN or event & select.POLLPRI: - if rfd == proc.stdout.fileno(): + if rfd == stdout_fd: # logger.debug("Reading from stdout...") if chunk := proc.stdout.buffer.read(PIPE_BUF): # logger.debug("Done, length %d", len(chunk)) @@ -532,7 +535,7 @@ def main(): stdout_line_buffer = rest else: break - if rfd == proc.stderr.fileno(): + if rfd == stderr_fd: # logger.debug("Reading from stderr...") if chunk := proc.stderr.buffer.read(PIPE_BUF): # logger.debug("Done, length %d", len(chunk)) @@ -555,18 +558,18 @@ def main(): else: break if event & select.POLLERR: - if rfd == proc.stdin.fileno(): + if rfd == stdin_fd: logger.error("STDIN error") - if rfd == proc.stdout.fileno(): + if rfd == stdout_fd: logger.error("STDOUT error") - if rfd == proc.stderr.fileno(): + if rfd == stderr_fd: logger.error("STDERR error") if event & select.POLLHUP: - if rfd == proc.stdin.fileno(): + if rfd == stdin_fd: logger.debug("STDIN closed") - if rfd == proc.stdout.fileno(): + if rfd == stdout_fd: logger.debug("STDOUT closed") - if rfd == proc.stderr.fileno(): + if rfd == stderr_fd: logger.debug("STDERR closed") poll.unregister(rfd) pollc -= 1