Merge pull request #5735 from mnottale/parallelstreamwriter-race

Fix a race condition in ParallelStreamWriter.
This commit is contained in:
Joffrey F 2018-03-02 15:25:01 -08:00 committed by GitHub
commit 0156dd6b27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,6 +4,7 @@ from __future__ import unicode_literals
import logging import logging
import operator import operator
import sys import sys
from threading import Lock
from threading import Semaphore from threading import Semaphore
from threading import Thread from threading import Thread
@ -251,6 +252,7 @@ class ParallelStreamWriter(object):
""" """
noansi = False noansi = False
lock = Lock()
@classmethod @classmethod
def set_noansi(cls, value=True): def set_noansi(cls, value=True):
@ -274,6 +276,7 @@ class ParallelStreamWriter(object):
self.stream.flush() self.stream.flush()
def _write_ansi(self, obj_index, status): def _write_ansi(self, obj_index, status):
self.lock.acquire()
position = self.lines.index(obj_index) position = self.lines.index(obj_index)
diff = len(self.lines) - position diff = len(self.lines) - position
# move up # move up
@ -285,6 +288,7 @@ class ParallelStreamWriter(object):
# move back down # move back down
self.stream.write("%c[%dB" % (27, diff)) self.stream.write("%c[%dB" % (27, diff))
self.stream.flush() self.stream.flush()
self.lock.release()
def _write_noansi(self, obj_index, status): def _write_noansi(self, obj_index, status):
self.stream.write("{} {:<{width}} ... {}\r\n".format(self.msg, obj_index, self.stream.write("{} {:<{width}} ... {}\r\n".format(self.msg, obj_index,