Fix a race condition in ParallelStreamWriter.

Signed-off-by: Matthieu Nottale <matthieu.nottale@docker.com>
This commit is contained in:
Matthieu Nottale 2018-03-01 14:09:11 +01:00 committed by Joffrey F
parent 8ac59a7b5d
commit d36f222c7e

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,