fix minor memory leak caused by recent CanPush change

Putting the UUID in meant that equivilant CanPush messages no longer are ==
This commit is contained in:
Joey Hess 2013-05-22 15:47:06 -04:00
parent c1f7774920
commit 4effef3176
2 changed files with 11 additions and 3 deletions

View file

@ -32,8 +32,8 @@ notifyNetMessagerRestart =
waitNetMessagerRestart :: Assistant () waitNetMessagerRestart :: Assistant ()
waitNetMessagerRestart = readSV <<~ (netMessagerRestart . netMessager) waitNetMessagerRestart = readSV <<~ (netMessagerRestart . netMessager)
{- Store an important NetMessage for a client, and if the same message was {- Store an important NetMessage for a client, and if an equivilant
- already sent, remove it from sentImportantNetMessages. -} - message was already sent, remove it from sentImportantNetMessages. -}
storeImportantNetMessage :: NetMessage -> ClientID -> (ClientID -> Bool) -> Assistant () storeImportantNetMessage :: NetMessage -> ClientID -> (ClientID -> Bool) -> Assistant ()
storeImportantNetMessage m client matchingclient = go <<~ netMessager storeImportantNetMessage m client matchingclient = go <<~ netMessager
where where
@ -45,7 +45,7 @@ storeImportantNetMessage m client matchingclient = go <<~ netMessager
putTMVar (sentImportantNetMessages nm) $ putTMVar (sentImportantNetMessages nm) $
M.mapWithKey removematching sent M.mapWithKey removematching sent
removematching someclient s removematching someclient s
| matchingclient someclient = S.delete m s | matchingclient someclient = S.filter (not . equivilantImportantNetMessages m) s
| otherwise = s | otherwise = s
{- Indicates that an important NetMessage has been sent to a client. -} {- Indicates that an important NetMessage has been sent to a client. -}

View file

@ -64,6 +64,14 @@ isImportantNetMessage (Pushing c (CanPush _ _)) = Just c
isImportantNetMessage (Pushing c (PushRequest _)) = Just c isImportantNetMessage (Pushing c (PushRequest _)) = Just c
isImportantNetMessage _ = Nothing 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 :: NetMessage -> ClientID -> NetMessage
readdressNetMessage (PairingNotification stage _ uuid) c = PairingNotification stage c uuid readdressNetMessage (PairingNotification stage _ uuid) c = PairingNotification stage c uuid
readdressNetMessage (Pushing _ stage) c = Pushing c stage readdressNetMessage (Pushing _ stage) c = Pushing c stage