diff --git a/squinnondation/peers.py b/squinnondation/peers.py index ed4fdee..0f69edd 100644 --- a/squinnondation/peers.py +++ b/squinnondation/peers.py @@ -616,12 +616,14 @@ class User(Peer): This add the message in the history if not already done. Returns True iff the message was not already received previously. """ - + + self.data_lock.acquire() if (sender_id, nonce) not in self.received_messages: # If it is a new message, add it to recent_messages d = self.make_inundation_dict() pkt = Packet().construct(tlv) self.recent_messages[(sender_id, nonce)] = [pkt, time.time(), d] + self.data_lock.release() # in all cases, remove the sender from the list of neighbours to be inundated self.remove_from_inundation(relay, sender_id, nonce) @@ -629,8 +631,10 @@ class User(Peer): if (sender_id, nonce) in self.received_messages: return False + self.data_lock.acquire() self.add_message(msg) # for display purposes self.received_messages[(sender_id, nonce)] = Message(msg, sender_id, nonce) + self.data_lock.release() return True @@ -650,6 +654,7 @@ class User(Peer): """ Remove the sender from the list of neighbours to be inundated """ + self.data_lock.acquire() if (sender_id, nonce) in self.recent_messages: # If a peer is late in its acknowledgement, the absence of the previous if causes an error. for addr in peer.addresses: @@ -657,6 +662,7 @@ class User(Peer): if not self.recent_messages[(sender_id, nonce)][2]: # If dictionnary is empty, remove the message self.recent_messages.pop((sender_id, nonce), None) + self.data_lock.release() def clean_inundation(self) -> None: """ @@ -1073,6 +1079,7 @@ class Listener(Thread): self.user.refresh_input() self.user.refresh_emoji_pad() + class Multicastlistener(Thread): """ Used to listen on the multicast group to discover new people