Commit b66c3fd3 authored by Julien Muchembled's avatar Julien Muchembled

qa: fix a race condition when using connection filters in threaded tests

parent 600cc94a
...@@ -484,7 +484,10 @@ class ConnectionFilter(object): ...@@ -484,7 +484,10 @@ class ConnectionFilter(object):
else: else:
return cls._addPacket(conn, packet) return cls._addPacket(conn, packet)
cls.filter_queue[conn] = queue = deque() cls.filter_queue[conn] = queue = deque()
p = packet.__new__(packet.__class__) p = packet.__class__
logging.debug("queued %s#0x%04x for %s",
p.__name__, packet.getId(), conn)
p = packet.__new__(p)
p.__dict__.update(packet.__dict__) p.__dict__.update(packet.__dict__)
queue.append(p) queue.append(p)
Connection._addPacket = _addPacket Connection._addPacket = _addPacket
...@@ -520,7 +523,10 @@ class ConnectionFilter(object): ...@@ -520,7 +523,10 @@ class ConnectionFilter(object):
else: else:
if conn.isClosed(): if conn.isClosed():
return return
cls._addPacket(conn, packet) # Use the thread that created the packet to reinject it,
# to avoid a race condition on Connector.queued.
conn.em.wakeup(lambda conn=conn, packet=packet:
conn.isClosed() or cls._addPacket(conn, packet))
continue continue
break break
else: else:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment