diff options
author | Joey Hess <joey@kitenet.net> | 2013-10-07 02:48:39 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-10-07 03:59:14 -0400 |
commit | 25dbffe682ba78d0a6dccaa9c64848600e729028 (patch) | |
tree | 2d2a61019defd49d35c5868beaab56984ecd9bd4 | |
parent | 717b988fd0786943a13be5e1ed20b7ce24890b74 (diff) |
status: Fix space leak in local mode, introduced in version 4.20130920.
Actually fixed 2 leaks, the tuple leak may have been older.
-rw-r--r-- | Command/Status.hs | 19 | ||||
-rw-r--r-- | debian/changelog | 1 |
2 files changed, 11 insertions, 9 deletions
diff --git a/Command/Status.hs b/Command/Status.hs index 290ecd586..e9df79eb3 100644 --- a/Command/Status.hs +++ b/Command/Status.hs @@ -311,15 +311,16 @@ getLocalStatInfo dir = do initial = (emptyKeyData, emptyKeyData, emptyNumCopiesStats) update matcher fast key file vs@(presentdata, referenceddata, numcopiesstats) = ifM (matcher $ FileInfo file file) - ( (,,) - <$> ifM (inAnnex key) + ( do + !presentdata' <- ifM (inAnnex key) ( return $ addKey key presentdata , return presentdata ) - <*> pure (addKey key referenceddata) - <*> if fast + let !referenceddata' = addKey key referenceddata + !numcopiesstats' <- if fast then return numcopiesstats else updateNumCopiesStats key file numcopiesstats + return $! (presentdata', referenceddata', numcopiesstats') , return vs ) @@ -345,11 +346,11 @@ addKey key (KeyData count size unknownsize backends) = ks = keySize key updateNumCopiesStats :: Key -> FilePath -> NumCopiesStats -> Annex NumCopiesStats -updateNumCopiesStats key file stats = do - variance <- Variance <$> numCopiesCheck file key (-) - return $ stats { numCopiesVarianceMap = update (numCopiesVarianceMap stats) variance } - where - update m variance = M.insertWith' (+) variance 1 m +updateNumCopiesStats key file (NumCopiesStats m) = do + !variance <- Variance <$> numCopiesCheck file key (-) + let !m' = M.insertWith' (+) variance 1 m + let !ret = NumCopiesStats m' + return ret showSizeKeys :: KeyData -> String showSizeKeys d = total ++ missingnote diff --git a/debian/changelog b/debian/changelog index cd0923ee9..166ff0121 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ git-annex (4.20131003) UNRELEASED; urgency=low * The control socket path passed to ssh needs to be 17 characters shorter than the maximum unix domain socket length, because ssh appends stuff to it to make a temporary filename. Closes: #725512 + * status: Fix space leak in local mode, introduced in version 4.20130920. -- Joey Hess <joeyh@debian.org> Thu, 03 Oct 2013 15:41:24 -0400 |