Remove some incorrect Free() calls. Tested: Ran an Android build; the crashes stopped. Change-Id: Ic1f034fe77264e4dff50330c0535c5c00dce615d
diff --git a/cache/lazyrepo.go b/cache/lazyrepo.go index 87eb7af..83e3bd0 100644 --- a/cache/lazyrepo.go +++ b/cache/lazyrepo.go
@@ -47,8 +47,9 @@ } // Repository returns a git.Repository for this repo, or nil if it -// wasn't loaded. This method is safe for concurrent use from -// multiple goroutines. +// wasn't loaded. This method is safe for concurrent use from +// multiple goroutines. The return value must not be Free'd since it +// is persisted inside LazyRepo. func (r *LazyRepo) Repository() *git.Repository { r.repoMu.Lock() defer r.repoMu.Unlock()
diff --git a/cache/treecache.go b/cache/treecache.go index 1435f13..754a448 100644 --- a/cache/treecache.go +++ b/cache/treecache.go
@@ -114,7 +114,9 @@ if err != nil { return nil, err } - defer peeledObj.Free() + if peeledObj != obj { + defer peeledObj.Free() + } asTree, err := peeledObj.AsTree() if err != nil {
diff --git a/fs/gitilesfs.go b/fs/gitilesfs.go index 3557566..32b4fcb 100644 --- a/fs/gitilesfs.go +++ b/fs/gitilesfs.go
@@ -181,9 +181,6 @@ if clone && repo == nil { r.lazyRepo.Clone() } - if repo != nil { - defer repo.Free() - } var content []byte if repo != nil {