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 
> <javascript:>> 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 <javascript:>.
>> 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.

Reply via email to