Inundation is more thread-safe
This commit is contained in:
parent
4a79fcaabe
commit
8f3b7cd9d2
|
@ -616,12 +616,14 @@ class User(Peer):
|
||||||
This add the message in the history if not already done.
|
This add the message in the history if not already done.
|
||||||
Returns True iff the message was not already received previously.
|
Returns True iff the message was not already received previously.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
self.data_lock.acquire()
|
||||||
if (sender_id, nonce) not in self.received_messages:
|
if (sender_id, nonce) not in self.received_messages:
|
||||||
# If it is a new message, add it to recent_messages
|
# If it is a new message, add it to recent_messages
|
||||||
d = self.make_inundation_dict()
|
d = self.make_inundation_dict()
|
||||||
pkt = Packet().construct(tlv)
|
pkt = Packet().construct(tlv)
|
||||||
self.recent_messages[(sender_id, nonce)] = [pkt, time.time(), d]
|
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
|
# in all cases, remove the sender from the list of neighbours to be inundated
|
||||||
self.remove_from_inundation(relay, sender_id, nonce)
|
self.remove_from_inundation(relay, sender_id, nonce)
|
||||||
|
@ -629,8 +631,10 @@ class User(Peer):
|
||||||
if (sender_id, nonce) in self.received_messages:
|
if (sender_id, nonce) in self.received_messages:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
self.data_lock.acquire()
|
||||||
self.add_message(msg) # for display purposes
|
self.add_message(msg) # for display purposes
|
||||||
self.received_messages[(sender_id, nonce)] = Message(msg, sender_id, nonce)
|
self.received_messages[(sender_id, nonce)] = Message(msg, sender_id, nonce)
|
||||||
|
self.data_lock.release()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -650,6 +654,7 @@ class User(Peer):
|
||||||
"""
|
"""
|
||||||
Remove the sender from the list of neighbours to be inundated
|
Remove the sender from the list of neighbours to be inundated
|
||||||
"""
|
"""
|
||||||
|
self.data_lock.acquire()
|
||||||
if (sender_id, nonce) in self.recent_messages:
|
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.
|
# If a peer is late in its acknowledgement, the absence of the previous if causes an error.
|
||||||
for addr in peer.addresses:
|
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
|
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.recent_messages.pop((sender_id, nonce), None)
|
||||||
|
self.data_lock.release()
|
||||||
|
|
||||||
def clean_inundation(self) -> None:
|
def clean_inundation(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -1073,6 +1079,7 @@ class Listener(Thread):
|
||||||
self.user.refresh_input()
|
self.user.refresh_input()
|
||||||
self.user.refresh_emoji_pad()
|
self.user.refresh_emoji_pad()
|
||||||
|
|
||||||
|
|
||||||
class Multicastlistener(Thread):
|
class Multicastlistener(Thread):
|
||||||
"""
|
"""
|
||||||
Used to listen on the multicast group to discover new people
|
Used to listen on the multicast group to discover new people
|
||||||
|
|
Loading…
Reference in New Issue