aboutsummaryrefslogtreecommitdiff
path: root/netaddr.go
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2019-06-29 16:35:32 -0400
committerDeterminant <ted.sybil@gmail.com>2019-06-29 16:35:32 -0400
commitbbd7fad4b9fc657780fa35dcdc979e72200eb053 (patch)
tree5c7b21a079258fbce618dfb03943414510b22a7e /netaddr.go
parent63ec65887ed90427c54b9b056a347600bd612744 (diff)
fix the cgo bug
Diffstat (limited to 'netaddr.go')
-rw-r--r--netaddr.go7
1 files changed, 6 insertions, 1 deletions
diff --git a/netaddr.go b/netaddr.go
index 1b2eb63..7955334 100644
--- a/netaddr.go
+++ b/netaddr.go
@@ -39,14 +39,19 @@ func NewAddrFromIPPortString(addr string, err *Error) (res NetAddr) {
// Convert a Go slice of net addresses to NetAddrArray.
func NewAddrArrayFromAddrs(arr []NetAddr) (res NetAddrArray) {
size := len(arr)
+ _arr := make([]CNetAddr, size)
+ for i, v := range arr {
+ _arr[i] = v.inner
+ }
if size > 0 {
// FIXME: here we assume struct of a single pointer has the same memory
// footprint the pointer
- base := (**C.netaddr_t)(rawptr_t(&arr[0]))
+ base := (**C.netaddr_t)(rawptr_t(&_arr[0]))
res = &netAddrArray{ inner: C.netaddr_array_new_from_addrs(base, C.size_t(size)) }
} else {
res = &netAddrArray{ inner: C.netaddr_array_new() }
}
+ runtime.KeepAlive(_arr)
runtime.SetFinalizer(res, func(self NetAddrArray) { self.free() })
return
}