@@ -468,7 +468,7 @@ class Replica(Role):
468468 self .execute_fn = execute_fn
469469 self .state = state
470470 self .slot = slot
471- self .decisions = decisions.copy()
471+ self .decisions = decisions
472472 self .peers = peers
473473 self .proposals = {}
474474 # next slot num for a proposal (may lead slot)
@@ -983,7 +983,9 @@ class Network(object):
983983
984984 def send (self , sender , destinations , message ):
985985 sender.logger.debug(" sending %s to %s " , message, destinations)
986- for dest in (d for d in destinations if d in self .nodes):
986+ # avoid aliasing by making a closure containing distinct deep copy of
987+ # message for each dest
988+ def sendto (dest , message ):
987989 if dest == sender.address:
988990 # reliably deliver local messages with no delay
989991 self .set_timer(sender.address, 0 ,
@@ -994,6 +996,8 @@ class Network(object):
994996 self .set_timer(dest, delay,
995997 functools.partial(self .nodes[dest].receive,
996998 sender.address, message))
999+ for dest in (d for d in destinations if d in self .nodes):
1000+ sendto(dest, copy.deepcopy(message))
9971001
9981002```
9991003
0 commit comments