summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-05-22 15:47:06 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-05-22 15:47:06 -0400
commit40e1559718f80ab7b1b3ebb442a0663b7a0ae8f8 (patch)
treeab95ebfd613ba7e1a6813e8282387a5d7329000f
parentf1ee72b8098e487b036cc1f35bb6aa08a8f8f948 (diff)
fix minor memory leak caused by recent CanPush change
Putting the UUID in meant that equivilant CanPush messages no longer are ==
-rw-r--r--Assistant/NetMessager.hs6
-rw-r--r--Assistant/Types/NetMessager.hs8
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