C function just copies the parameters passed. All of the params have escaped to heap as seen in output generated by using -gcflags "-m -m" during build.
I am trying to figure out if there is a possibility that gc frees any of these parameters before the C function call returns. On Fri, Aug 18, 2017 at 7:57 PM, Ian Lance Taylor <[email protected]> wrote: > On Fri, Aug 18, 2017 at 12:53 AM, Bhaskar Singhal > <[email protected]> wrote: > > I am running into a seg fault. The code keeps crashing either due to > > unexpected signal or double free. > > > > Any pointers on what I am doing wrong here: > > > > Code Snippet: > > // Put puts the given key / value to the kvstore > > func (kvs *kvstore) Put(key []byte, value []byte) error { > > /* Encode key to avoid null characters in byte[] */ > > strk := base64.StdEncoding.EncodeToString([]byte(key)) > > csk := C.CString(strk) > > defer C.free(unsafe.Pointer(csk)) > > > > /* Encode value to avoid null characters in byte[] */ > > strv := base64.StdEncoding.EncodeToString([]byte(value)) > > csv := C.CString(strv) > > defer C.free(unsafe.Pointer(csv)) > > > > if kvs.kvtree == nil { > > return fmt.Errorf("put failed because kvtree is nil") > > } > > size := C.int32_t(len(strv)) > > > > ret := C.put(kvs.kvtree, csk, csv, &size) > > if ret != C.int8_t(1) { > > return fmt.Errorf("kvtree put failed %g", ret) > > } > > return nil > > } > > > > C Function Put: > > int8_t put(KVTree* kv, > > const char* key, > > const char* value, > > const int32_t* valuebytes); > > > It really depends on how the C function behaves. My guess is that it > does not expect the values to be freed. > > Ian > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
