diff --git a/hbs2-core/lib/HBS2/Defaults.hs b/hbs2-core/lib/HBS2/Defaults.hs index 02217d03..1634c022 100644 --- a/hbs2-core/lib/HBS2/Defaults.hs +++ b/hbs2-core/lib/HBS2/Defaults.hs @@ -66,7 +66,7 @@ defBlockWipTimeout :: TimeSpec defBlockWipTimeout = defCookieTimeout defBlockInfoTimeout :: Timeout 'Seconds -defBlockInfoTimeout = 1 +defBlockInfoTimeout = 2 defBlockInfoTimeoutSpec :: TimeSpec defBlockInfoTimeoutSpec = toTimeSpec defBlockInfoTimeout diff --git a/hbs2-peer/app/BlockDownload.hs b/hbs2-peer/app/BlockDownload.hs index 2015d4b7..b4783be6 100644 --- a/hbs2-peer/app/BlockDownload.hs +++ b/hbs2-peer/app/BlockDownload.hs @@ -527,9 +527,13 @@ postponedLoop env0 = do void $ liftIO $ async $ withPeerM e $ withDownload env0 do - pause @'Seconds 60 - ban <- asks (view blockBanned) - void $ liftIO $ Cache.purgeExpired ban + forever do + pause @'Seconds 60 + ban <- asks (view blockBanned) + void $ liftIO $ Cache.purgeExpired ban + wip <- asks (view blockWip) >>= liftIO . Cache.keys <&> HashSet.fromList + trace $ "wipe banned!" + void $ liftIO $ Cache.filterWithKey (\(h,_) _ -> HashSet.member h wip ) ban void $ liftIO $ async $ withPeerM e $ withDownload env0 do diff --git a/hbs2-peer/app/PeerTypes.hs b/hbs2-peer/app/PeerTypes.hs index f785346d..4471a6c4 100644 --- a/hbs2-peer/app/PeerTypes.hs +++ b/hbs2-peer/app/PeerTypes.hs @@ -334,7 +334,7 @@ delFromPostponed h = do liftIO $ atomically $ do modifyTVar' po (HashMap.delete h) -removeFromWip :: MonadIO m => Hash HbSync -> BlockDownloadM e m () +removeFromWip :: (MyPeer e, MonadIO m) => Hash HbSync -> BlockDownloadM e m () removeFromWip h = do wip <- asks (view blockWip) st <- asks (view blockState) @@ -342,8 +342,11 @@ removeFromWip h = do tinq <- asks (view blockInQ) po <- asks (view peerPostponed) wi <- asks (view blocksWipCnt) + ba <- asks (view blockBanned) liftIO $ Cache.delete wip h + liftIO $ Cache.filterWithKey (\(hx,_) _ -> hx /= h) ba + liftIO $ atomically $ do modifyTVar' st (HashMap.delete h) modifyTVar' sz (HashMap.delete h)