From dc4409793db0205ce7c0783a10363d7d67aee674 Mon Sep 17 00:00:00 2001 From: Calin Seciu Date: Sat, 20 Feb 2016 14:34:29 +0200 Subject: [PATCH] Remove Untrack() from free() function https://github.com/libgit2/git2go/pull/257#discussion_r53443211 --- stash.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/stash.go b/stash.go index 7a4fc93..8d8f984 100644 --- a/stash.go +++ b/stash.go @@ -182,12 +182,16 @@ func (opts *StashApplyOptions) toC() ( return } +// should be called after every call to toC() as deferred. +func untrackStashApplyOptionsCallback(optsC *C.git_stash_apply_options) { + if optsC != nil && optsC.progress_payload != nil { + pointerHandles.Untrack(optsC.progress_payload) + } +} + func freeStashApplyOptions(optsC *C.git_stash_apply_options) { if optsC != nil { freeCheckoutOpts(&optsC.checkout_options) - if optsC.progress_payload != nil { - pointerHandles.Untrack(optsC.progress_payload) - } } } @@ -217,6 +221,7 @@ func freeStashApplyOptions(optsC *C.git_stash_apply_options) { // Error codes can be interogated with IsErrorCode(err, ErrNotFound). func (c *StashCollection) Apply(index int, opts StashApplyOptions) error { optsC, progressData := opts.toC() + defer untrackStashApplyOptionsCallback(optsC) defer freeStashApplyOptions(optsC) runtime.LockOSThread() @@ -316,6 +321,7 @@ func (c *StashCollection) Drop(index int) error { // state for the given index. func (c *StashCollection) Pop(index int, opts StashApplyOptions) error { optsC, progressData := opts.toC() + defer untrackStashApplyOptionsCallback(optsC) defer freeStashApplyOptions(optsC) runtime.LockOSThread()