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 <ksbhas...@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 golang-nuts+unsubscr...@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/CALjMrq5bk8mTDnS7t3nzoq8tzKowmueaAMQBda59sBkOpLDF%3Dg%40mail.gmail.com.

Reply via email to