On Fri, Aug 18, 2017 at 8:59 AM, Bhaskar Singhal <[email protected]> wrote: > > 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.
Go's garbage collector never frees memory allocated by C.CString, just as it never frees memory allocated by C.malloc. Ian > 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.
