Hi, How can runtime.Keepalive be helpful here ?
Thanks, Nitish On Mon, Feb 17, 2020 at 9:14 PM K.S. Bhaskar <ksbhas...@gmail.com> wrote: > See whether runtime.Keepalive (https://golang.org/pkg/runtime/#KeepAlive) > helps. > > Regards > – Bhaskar > > On Monday, February 17, 2020 at 10:33:42 AM UTC-5, Nitish Saboo wrote: >> >> Hi, >> >> These are my Go and C functions.I cannot explicitly garbage collect the C >> method before use, not sure if that is the issue. >> The first line in the 'match' method itself is not getting printed. >> >> void match(const gchar *x, size_t len_x, const gchar *y, size_t len_y) >> { >> printf("Reached match method "); >> LogMessage *msg = log_msg_new_empty(); >> log_msg_set_value(msg, LM_V_MESSAGE, x, len_x); >> log_msg_set_value(msg, LM_V_PROGRAM, y, len_y); >> pattern_db_process(db_pattern, msg); >> log_msg_unref(msg); >> >> } >> >> func (obj parser) ParseMessage(x string, y string) >> { >> >> app := C.CString(x) >> defer C.free(unsafe.Pointer(app)) >> msg := C.CString(y) >> defer C.free(unsafe.Pointer(msg)) >> C.match(msg, C.size_t(len(y)), app, C.size_t(len(x))) >> } >> >> Thanks, >> Nitish >> >> On Mon, Feb 17, 2020 at 8:14 PM K.S. Bhaskar <ksbh...@gmail.com> wrote: >> >>> Chances are that a parameter or structure you are passing from Go to C >>> is getting garbage collected by Go before the C code is done with it. Read >>> the CGO documentaton – it's dense, but every sentence, every word, has a >>> purpose. >>> >>> In case it helps, take a look at the video of my recent talk at FOSDEM >>> 2020 in Brussels (https://fosdem.org/2020/schedule/event/dragonscgo/); >>> slides at >>> https://docs.yottadb.com/Presentations/200202-1DragonsofCGOFOSDEM.pdf >>> >>> Regards >>> – Bhaskar >>> >>> On Monday, February 17, 2020 at 9:33:00 AM UTC-5, Nitish Saboo wrote: >>>> >>>> Hi, >>>> >>>> This is my go env: >>>> >>>> nsaboo@ubuntu:~$ go version >>>> go version go1.12.4 linux/amd64 >>>> nsaboo@ubuntu:~$ go env >>>> GOARCH="amd64" >>>> GOBIN="" >>>> GOCACHE="/home/nsaboo/.cache/go-build" >>>> GOEXE="" >>>> GOFLAGS="" >>>> GOHOSTARCH="amd64" >>>> GOHOSTOS="linux" >>>> GOOS="linux" >>>> GOPATH="/home/nsaboo/Documents/goworkspace" >>>> GOPROXY="" >>>> GORACE="" >>>> GOROOT="/usr/local/go" >>>> GOTMPDIR="" >>>> GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" >>>> GCCGO="gccgo" >>>> CC="gcc" >>>> CXX="g++" >>>> CGO_ENABLED="1" >>>> GOMOD="" >>>> CGO_CFLAGS="-g -O2" >>>> CGO_CPPFLAGS="" >>>> CGO_CXXFLAGS="-g -O2" >>>> CGO_FFLAGS="-g -O2" >>>> CGO_LDFLAGS="-g -O2" >>>> PKG_CONFIG="pkg-config" >>>> GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 >>>> -fdebug-prefix-map=/tmp/go-build659816641=/tmp/go-build >>>> -gno-record-gcc-switches" >>>> >>>> 'go build -v -x main.go' went through fine and the binary(main) was >>>> created successfully. >>>> >>>> While making a cgo call from go code to C code I am getting the >>>> following error: >>>> >>>> nsaboo@ubuntu:~/Documents/goworkspace/src/poc$ ./main >>>> GOMAZPROCS : 2 >>>> START >>>> DIR: /home/nsaboo/Documents/goworkspace/src/poc >>>> Reached C module path :/usr/local/lib/syslog-ng >>>> Reached C filepath >>>> :/home/nsaboo/Documents/goworkspace/src/poc/patterns_test.xml >>>> Printing patterndb address: 0x151e1e0 >>>> Just before parsing >>>> fatal error: unexpected signal during runtime execution >>>> [signal SIGSEGV: segmentation violation code=0x1 >>>> addr=0xffffffff04d07885 pc=0x7fe62f2d2922] >>>> >>>> runtime stack: >>>> runtime.throw(0x4f7e77, 0x2a) >>>> /usr/local/go/src/runtime/panic.go:617 +0x72 >>>> runtime.sigpanic() >>>> /usr/local/go/src/runtime/signal_unix.go:374 +0x4a9 >>>> >>>> goroutine 1 [syscall]: >>>> runtime.cgocall(0x4b7380, 0xc000044d90, 0xc0000a8000) >>>> /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc000044d60 >>>> sp=0xc000044d28 pc=0x404f4b >>>> main._Cfunc_match(0x16e3880, 0x16c, 0x154d680, 0x7) >>>> _cgo_gotypes.go:165 +0x45 fp=0xc000044d90 sp=0xc000044d60 pc=0x4b4825 >>>> main.Syslogparser.ParseMessage(0xc0000a4000, 0x3c, 0x4f47dd, 0x18, >>>> 0xc0000a6000, 0x0, 0x7, 0x4f915f, 0x16c) >>>> /home/nsaboo/Documents/goworkspace/src/poc/main.go:120 +0x12c >>>> fp=0xc000044e10 sp=0xc000044d90 pc=0x4b56ec >>>> main.main() >>>> /home/nsaboo/Documents/goworkspace/src/poc/main.go:219 +0x3c1 >>>> fp=0xc000044f98 sp=0xc000044e10 pc=0x4b6031 >>>> runtime.main() >>>> /usr/local/go/src/runtime/proc.go:200 +0x20c fp=0xc000044fe0 >>>> sp=0xc000044f98 pc=0x42cd7c >>>> runtime.goexit() >>>> /usr/local/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc000044fe8 >>>> sp=0xc000044fe0 pc=0x4548a1 >>>> >>>> 1)How can I debug this error further ? >>>> >>>> 2)What could be the reason for this error ? >>>> >>>> Thanks, >>>> Nitish >>>> >>> -- >>> 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 golan...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/golang-nuts/4ce0c9a3-9ed7-4408-9d49-d8b0b2960ea4%40googlegroups.com >>> <https://groups.google.com/d/msgid/golang-nuts/4ce0c9a3-9ed7-4408-9d49-d8b0b2960ea4%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > 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 golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/225d453d-1f5f-4da1-8b65-d97ba3b404f1%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/225d453d-1f5f-4da1-8b65-d97ba3b404f1%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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 golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CALjMrq5b0%3DPTib06CmnmzPhoUb70NYoL4rkUy_0gGV9dyggfjg%40mail.gmail.com.