Browse Source

Add race-condition debugging tool to mininode

0.13
Suhas Daftuar 9 years ago
parent
commit
82a0ce09b4
  1. 15
      qa/rpc-tests/test_framework/mininode.py

15
qa/rpc-tests/test_framework/mininode.py

@ -1004,6 +1004,18 @@ class msg_reject(object):
class NodeConnCB(object): class NodeConnCB(object):
def __init__(self): def __init__(self):
self.verack_received = False self.verack_received = False
# deliver_sleep_time is helpful for debugging race conditions in p2p
# tests; it causes message delivery to sleep for the specified time
# before acquiring the global lock and delivering the next message.
self.deliver_sleep_time = None
def set_deliver_sleep_time(self, value):
with mininode_lock:
self.deliver_sleep_time = value
def get_deliver_sleep_time(self):
with mininode_lock:
return self.deliver_sleep_time
# Spin until verack message is received from the node. # Spin until verack message is received from the node.
# Tests may want to use this as a signal that the test can begin. # Tests may want to use this as a signal that the test can begin.
@ -1017,6 +1029,9 @@ class NodeConnCB(object):
time.sleep(0.05) time.sleep(0.05)
def deliver(self, conn, message): def deliver(self, conn, message):
deliver_sleep = self.get_deliver_sleep_time()
if deliver_sleep is not None:
time.sleep(deliver_sleep)
with mininode_lock: with mininode_lock:
try: try:
getattr(self, 'on_' + message.command)(conn, message) getattr(self, 'on_' + message.command)(conn, message)

Loading…
Cancel
Save