summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--git.go10
-rw-r--r--handles.go10
2 files changed, 20 insertions, 0 deletions
diff --git a/git.go b/git.go
index 0459dde..bd01b6d 100644
--- a/git.go
+++ b/git.go
@@ -139,6 +139,16 @@ func init() {
C.git_openssl_set_locking()
}
+// Shutdown frees all the resources acquired by libgit2. Make sure no
+// references to any git2go objects are live before calling this.
+// After this is called, invoking any function from this library will result in
+// undefined behavior, so make sure this is called carefully.
+func Shutdown() {
+ pointerHandles.Clear()
+
+ C.git_libgit2_shutdown()
+}
+
// Oid represents the id for a Git object.
type Oid [20]byte
diff --git a/handles.go b/handles.go
index d27d3c3..c0d4b3c 100644
--- a/handles.go
+++ b/handles.go
@@ -43,6 +43,16 @@ func (v *HandleList) Untrack(handle unsafe.Pointer) {
v.Unlock()
}
+// Clear stops tracking all the managed pointers.
+func (v *HandleList) Clear() {
+ v.Lock()
+ for handle := range v.handles {
+ delete(v.handles, handle)
+ C.free(handle)
+ }
+ v.Unlock()
+}
+
// Get retrieves the pointer from the given handle
func (v *HandleList) Get(handle unsafe.Pointer) interface{} {
v.RLock()