Hi Tamas, You call "void match(const gchar *x, size_t len_x, const gchar *y, size_t len_y)" as "C.match(msg, C.size_t(len(y)), app, C.size_t(len(x)))" , where app := C.CString(x) defer C.free(unsafe.Pointer(app)) msg := C.CString(y) defer C.free(unsafe.Pointer(msg)) ?
Are the x, y, app, msg and the length in the correct order? Yes, x,y, app, msg are in correct order. Does any of the input strings contains '\0' (zero byte) ? No, none of the input strings are of zero byte. Thanks, Nitish On Tue, Feb 18, 2020 at 2:01 AM Tamás Gulácsi <tgulacs...@gmail.com> wrote: > > > 2020. február 17., hétfő 16:33:42 UTC+1 időpontban Nitish Saboo a > következőt írta: >> >> 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 call "void match(const gchar *x, size_t len_x, const gchar *y, size_t > len_y)" > as "C.match(msg, C.size_t(len(y)), app, C.size_t(len(x)))" , where > app := C.CString(x) > defer C.free(unsafe.Pointer(app)) > msg := C.CString(y) > defer C.free(unsafe.Pointer(msg)) > ? > > Are the x, y, app, msg and the length in the correct order? > Does any of the input strings contains '\0' (zero byte) ? > > -- > 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/9567cb52-9735-483a-a916-f41a72e838e1%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/9567cb52-9735-483a-a916-f41a72e838e1%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/CALjMrq6KWe3%2BQDx%2B90aeYgxeJYqwAsR5Q7Fbq4sTL9A5u2fibg%40mail.gmail.com.