Add a way to cleanly shut down the library #578
10
git.go
10
git.go
|
@ -139,6 +139,16 @@ func init() {
|
||||||
C.git_openssl_set_locking()
|
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.
|
// Oid represents the id for a Git object.
|
||||||
type Oid [20]byte
|
type Oid [20]byte
|
||||||
|
|
||||||
|
|
10
handles.go
10
handles.go
|
@ -43,6 +43,16 @@ func (v *HandleList) Untrack(handle unsafe.Pointer) {
|
||||||
v.Unlock()
|
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
|
// Get retrieves the pointer from the given handle
|
||||||
func (v *HandleList) Get(handle unsafe.Pointer) interface{} {
|
func (v *HandleList) Get(handle unsafe.Pointer) interface{} {
|
||||||
v.RLock()
|
v.RLock()
|
||||||
|
|
Loading…
Reference in New Issue