bpo-33078 - Fix queue size on pickling error (GH-6119)

This commit is contained in:
Thomas Moreau 2018-03-21 16:50:28 +01:00 committed by Antoine Pitrou
parent 9308dea3e1
commit e2f33add63
3 changed files with 23 additions and 2 deletions

View file

@ -161,7 +161,7 @@ class Queue(object):
target=Queue._feed,
args=(self._buffer, self._notempty, self._send_bytes,
self._wlock, self._writer.close, self._ignore_epipe,
self._on_queue_feeder_error),
self._on_queue_feeder_error, self._sem),
name='QueueFeederThread'
)
self._thread.daemon = True
@ -203,7 +203,7 @@ class Queue(object):
@staticmethod
def _feed(buffer, notempty, send_bytes, writelock, close, ignore_epipe,
onerror):
onerror, queue_sem):
debug('starting thread to feed data to pipe')
nacquire = notempty.acquire
nrelease = notempty.release
@ -255,6 +255,12 @@ class Queue(object):
info('error in queue thread: %s', e)
return
else:
# Since the object has not been sent in the queue, we need
# to decrease the size of the queue. The error acts as
# if the object had been silently removed from the queue
# and this step is necessary to have a properly working
# queue.
queue_sem.release()
onerror(e, obj)
@staticmethod