From 563c4eb06db4e1174c69d2f6ac96fb91fdc0f8de Mon Sep 17 00:00:00 2001 From: Kai Storbeck Date: Wed, 11 Feb 2015 20:13:35 +0100 Subject: [PATCH] add some comments, drop reflect version --- rados/conn.go | 21 ++++++--------------- rados/rados_test.go | 2 ++ 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/rados/conn.go b/rados/conn.go index f8e9984..cdae3d6 100644 --- a/rados/conn.go +++ b/rados/conn.go @@ -7,7 +7,6 @@ import "C" import "unsafe" import "bytes" -import "reflect" // ClusterStat represents Ceph cluster statistics. type ClusterStat struct { @@ -277,32 +276,24 @@ func (c *Conn) MonCommand(args []byte) (buffer []byte, info string, err error) { ret := C.rados_mon_command(c.cluster, &argv[0], C.size_t(len(args)), - inbuf, // inbuf + inbuf, // bulk input (e.g. crush map) C.size_t(0), // length inbuf - &outbuf, // actual data - &outbuflen, // len data - &outs, // report largenumber + &outbuf, // buffer + &outbuflen, // buffer length + &outs, // status string &outslen) if outslen > 0 { info = C.GoStringN(outs, C.int(outslen)) - //C.rados_buffer_free(outs) C.free(unsafe.Pointer(outs)) } if outbuflen > 0 { - length := int(outbuflen) - hdr := reflect.SliceHeader{ - Data: uintptr(unsafe.Pointer(outbuf)), - Len: length, - Cap: length, - } - // now goSlice is a Go slice backed by the C array - buffer = *(*[]byte)(unsafe.Pointer(&hdr)) + buffer = C.GoBytes(unsafe.Pointer(outbuf), C.int(outbuflen)) + C.free(unsafe.Pointer(outbuf)) } if ret != 0 { err = RadosError(int(ret)) return nil, info, err - // info might contain hints as to why the error happened } return diff --git a/rados/rados_test.go b/rados/rados_test.go index 2c404fa..26cf689 100644 --- a/rados/rados_test.go +++ b/rados/rados_test.go @@ -391,6 +391,8 @@ func TestMonCommand(t *testing.T) { var message map[string]interface{} err = json.Unmarshal(buf, &message) assert.NoError(t, err) + + conn.Shutdown() } func TestObjectIterator(t *testing.T) {