summaryrefslogtreecommitdiff
path: root/P2P
diff options
context:
space:
mode:
Diffstat (limited to 'P2P')
-rw-r--r--P2P/Annex.hs21
1 files changed, 9 insertions, 12 deletions
diff --git a/P2P/Annex.hs b/P2P/Annex.hs
index e9b59652c..351fb38bb 100644
--- a/P2P/Annex.hs
+++ b/P2P/Annex.hs
@@ -25,10 +25,8 @@ import Utility.Metered
import Control.Monad.Free
--- When we're serving a peer, we know their uuid, and can use it to update
--- transfer logs.
data RunMode
- = Serving UUID
+ = Serving UUID ChangedRefsHandle
| Client
-- Full interpreter for Proto, that can receive and send objects.
@@ -115,18 +113,17 @@ runLocal runmode runner a = case a of
protoaction False
next
Right _ -> runner next
- WaitRefChange next -> do
- v <- tryNonAsync $ bracket
- watchChangedRefs
- (liftIO . stopWatchingChangedRefs)
- (liftIO . waitChangedRefs)
- case v of
- Left e -> return (Left (show e))
- Right changedrefs -> runner (next changedrefs)
+ WaitRefChange next -> case runmode of
+ Serving _ h -> do
+ v <- tryNonAsync $ liftIO $ waitChangedRefs h
+ case v of
+ Left e -> return (Left (show e))
+ Right changedrefs -> runner (next changedrefs)
+ _ -> return $ Left "change notification not implemented for client"
where
transfer mk k af ta = case runmode of
-- Update transfer logs when serving.
- Serving theiruuid ->
+ Serving theiruuid _ ->
mk theiruuid k af noRetry ta noNotification
-- Transfer logs are updated higher in the stack when
-- a client.