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 {