bind: use runtime.KeepAlive to keep foreign references alive

With Go 1.8 to be released, runtime.KeepAlive is now necessary to
make sure a reference to a foreign object is not garbage collected
and finalized before we get a chance to increment its reference

runtime.KeepAlive was introduced in Go 1.7 which is the minimum
version required by gomobile.

Change-Id: I32215f96e4f415ff9be7b979dd3677e067b8d201
Reviewed-by: David Crawshaw <>
diff --git a/bind/seq/ref.go b/bind/seq/ref.go
index 5ebe064..34e3653 100644
--- a/bind/seq/ref.go
+++ b/bind/seq/ref.go
@@ -102,6 +102,9 @@
 func (r *Ref) Bind_IncNum() int32 {
 	refnum := r.Bind_Num
+	// Make sure this reference is not finalized before
+	// the foreign reference count is incremented.
+	runtime.KeepAlive(r)
 	return refnum