From e9d19a282d9c372d9fbc98d88f3e1b27a903b1f0 Mon Sep 17 00:00:00 2001 From: Michal Gregor Date: Thu, 30 Jun 2016 08:15:24 +0200 Subject: [PATCH] Fixed race conditions pointed out in #3024. --- spyderlib/widgets/externalshell/baseshell.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/spyderlib/widgets/externalshell/baseshell.py b/spyderlib/widgets/externalshell/baseshell.py index 9d932324a63..2ccc24b57dc 100644 --- a/spyderlib/widgets/externalshell/baseshell.py +++ b/spyderlib/widgets/externalshell/baseshell.py @@ -302,7 +302,9 @@ def write_output(self): self.buffer_lock.lock() self.buffer.append(self.get_stdout()) self.buffer_lock.unlock() - return + + if not self.write_lock.tryLock(): + return self.shell.write(self.get_stdout(), flush=True) @@ -310,14 +312,14 @@ def write_output(self): self.buffer_lock.lock() messages = self.buffer self.buffer = [] - self.buffer_lock.unlock() if not messages: - break + self.write_lock.unlock() + self.buffer_lock.unlock() + return - self.shell.write("\n".join(messages), flush=True) - - self.write_lock.unlock() + self.buffer_lock.unlock() + self.shell.write("\n".join(messages), flush=True) def send_to_process(self, qstr): raise NotImplementedError