diff options
author | Joey Hess <joey@kitenet.net> | 2013-05-22 15:47:06 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-05-22 15:47:06 -0400 |
commit | 40e1559718f80ab7b1b3ebb442a0663b7a0ae8f8 (patch) | |
tree | ab95ebfd613ba7e1a6813e8282387a5d7329000f /Assistant | |
parent | f1ee72b8098e487b036cc1f35bb6aa08a8f8f948 (diff) |
fix minor memory leak caused by recent CanPush change
Putting the UUID in meant that equivilant CanPush messages no longer are ==
Diffstat (limited to 'Assistant')
-rw-r--r-- | Assistant/NetMessager.hs | 6 | ||||
-rw-r--r-- | Assistant/Types/NetMessager.hs | 8 |
2 files changed, 11 insertions, 3 deletions
diff --git a/Assistant/NetMessager.hs b/Assistant/NetMessager.hs index 2e786717d..7c996bb09 100644 --- a/Assistant/NetMessager.hs +++ b/Assistant/NetMessager.hs @@ -32,8 +32,8 @@ notifyNetMessagerRestart = waitNetMessagerRestart :: Assistant () waitNetMessagerRestart = readSV <<~ (netMessagerRestart . netMessager) -{- Store an important NetMessage for a client, and if the same message was - - already sent, remove it from sentImportantNetMessages. -} +{- Store an important NetMessage for a client, and if an equivilant + - message was already sent, remove it from sentImportantNetMessages. -} storeImportantNetMessage :: NetMessage -> ClientID -> (ClientID -> Bool) -> Assistant () storeImportantNetMessage m client matchingclient = go <<~ netMessager where @@ -45,7 +45,7 @@ storeImportantNetMessage m client matchingclient = go <<~ netMessager putTMVar (sentImportantNetMessages nm) $ M.mapWithKey removematching sent removematching someclient s - | matchingclient someclient = S.delete m s + | matchingclient someclient = S.filter (not . equivilantImportantNetMessages m) s | otherwise = s {- Indicates that an important NetMessage has been sent to a client. -} diff --git a/Assistant/Types/NetMessager.hs b/Assistant/Types/NetMessager.hs index 4b4e614a2..0af262e9a 100644 --- a/Assistant/Types/NetMessager.hs +++ b/Assistant/Types/NetMessager.hs @@ -64,6 +64,14 @@ isImportantNetMessage (Pushing c (CanPush _ _)) = Just c isImportantNetMessage (Pushing c (PushRequest _)) = Just c isImportantNetMessage _ = Nothing +{- Checks if two important NetMessages are equivilant. + - That is to say, assuming they were sent to the same client, + - would it do the same thing for one as for the other? -} +equivilantImportantNetMessages :: NetMessage -> NetMessage -> Bool +equivilantImportantNetMessages (Pushing _ (CanPush _ _)) (Pushing _ (CanPush _ _)) = True +equivilantImportantNetMessages (Pushing _ (PushRequest _)) (Pushing _ (PushRequest _)) = True +equivilantImportantNetMessages _ _ = False + readdressNetMessage :: NetMessage -> ClientID -> NetMessage readdressNetMessage (PairingNotification stage _ uuid) c = PairingNotification stage c uuid readdressNetMessage (Pushing _ stage) c = Pushing c stage |