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 {