diff options
author | Determinant <[email protected]> | 2019-06-16 23:27:05 -0400 |
---|---|---|
committer | Determinant <[email protected]> | 2019-06-16 23:27:05 -0400 |
commit | 3ba5b6536e730baf01efb3203be280c3e61319bd (patch) | |
tree | d07fd2d8f2e8db1fcfe5a14be38ba2fbf87a9075 /msg.go | |
parent | 63e3f71d4d6bed69b99bebc9866d1214837259f6 (diff) |
eliminate the use of Free()
Diffstat (limited to 'msg.go')
-rw-r--r-- | msg.go | 20 |
1 files changed, 14 insertions, 6 deletions
@@ -3,20 +3,28 @@ package salticidae // #include <stdlib.h> // #include "salticidae/msg.h" import "C" +import "runtime" -type Msg = *C.struct_msg_t +type CMsg = *C.struct_msg_t +type msg struct { inner CMsg } +type Msg = *msg + +func MsgFromC(ptr *C.struct_msg_t) Msg { return &msg{ inner: ptr } } func NewMsgMovedFromByteArray(opcode Opcode, _moved_payload ByteArray) Msg { - return C.msg_new_moved_from_bytearray(C._opcode_t(opcode), _moved_payload) + res := &msg{ inner: C.msg_new_moved_from_bytearray(C._opcode_t(opcode), _moved_payload.inner) } + runtime.SetFinalizer(res, func(self Msg) { self.free() }) + return res } -func (self Msg) Free() { C.msg_free(self) } +func (self Msg) free() { C.msg_free(self.inner) } func (self Msg) ConsumePayload() DataStream { - return C.msg_consume_payload(self) + res := &dataStream{ inner: C.msg_consume_payload(self.inner) } + runtime.SetFinalizer(res, func(self DataStream) { self.free() }) + return res } func (self Msg) GetOpcode() Opcode { - return Opcode(C.msg_get_opcode(self)) + return Opcode(C.msg_get_opcode(self.inner)) } - |