From 13811def941ab165dd58f8ce3aa97aa5b0576a74 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Fri, 17 Dec 2021 22:52:53 -0500 Subject: [PATCH] peerwithTokenService no longer uses Leave so as to preserve lock --- protocol/connections/engine.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/protocol/connections/engine.go b/protocol/connections/engine.go index 0fdd219..067c9f2 100644 --- a/protocol/connections/engine.go +++ b/protocol/connections/engine.go @@ -157,9 +157,7 @@ func (e *engine) eventHandler() { } go e.peerWithTokenServer(ev.Data[event.GroupServer], ev.Data[event.ServerTokenOnion], ev.Data[event.ServerTokenY], signature) case event.LeaveServer: - e.ephemeralServicesLock.Lock() e.leaveServer(ev.Data[event.GroupServer]) - e.ephemeralServicesLock.Unlock() case event.DeleteContact: onion := ev.Data[event.RemotePeer] // We remove this peer from out blocklist which will prevent them from contacting us if we have "block unknown peers" turned on. @@ -336,7 +334,7 @@ func (e *engine) peerWithTokenServer(onion string, tokenServerOnion string, toke return } // Otherwise...we are going to rebuild the connection(which will result in a bandwidth heavy resync)... - e.leaveServer(onion) + connectionService.service.Shutdown() } // Otherwise...let's reconnect } @@ -634,9 +632,9 @@ func (e *engine) handlePeerRetVal(hostname string, getValData, retValData []byte } // leaveServer disconnects from a server and deletes the ephemeral service -// REQUIREMENTS: must be called inside a block with e.ephemeralServicesLock.Lock() -// can't do it iself because is called from inside peerWithTokenServer which holds the lock func (e *engine) leaveServer(server string) { + e.ephemeralServicesLock.Lock() + defer e.ephemeralServicesLock.Unlock() ephemeralService, ok := e.ephemeralServices[server] if ok { ephemeralService.service.Shutdown()