On Thu, Jul 11, 2019 at 10:58 AM Nitish Saboo <nitish.sabo...@gmail.com> wrote:
>
> pattern_db_set_emit_func(patterndb[workerId], pdbtool_pdb_emit_accumulate, 
> cb);
> suggests that cb is being saved away for future use.
>
> >>>>yes cb is being saved away and is being used for future use for callbacks 
> >>>>to Go code.

Then clearly the Go code must not immediately free the C memory.  That
is no different from how C code would work.


> syslog-node.h
>  ============
>
>  #ifndef TEST_H_INCLUDED
>  #define TEST_H_INCLUDED
>
>  #include <stdlib.h>
>  typedef void (*key_value_cb)(const char* key, const char* value, size_t 
> value_len, int data);
>  typedef struct Accumulatedparams{
>      key_value_cb callback;
>     int data;
>  }Accumulatedparams;
>  int initialize_engine(const char* filename, const char* module_path);
>  int reload_pattern_db(const char* filename, Accumulatedparams *cb, int 
> workerId);
> int load_pattern_db(const char* filename, Accumulatedparams *cb, int 
> workerId);
>
> >>>>>If I declare the array in the following manner:
>
> result := make([]*C.struct_Accumulatedparams)
> store[0] = (*C.Accumulatedparams)(C.calloc(1, 
> C.sizeof_struct_Accumulatedparams))
>
> Here also the code gets compiled successfully, just that the GoLand IDE shows 
> store[0].callback and store[0].data in red color saying Unresolved reference 
> 'callback' and Unresolved reference 'data' respectively.Not sure how the code 
> compiles if the IDE shows it in red color. Binary(./main) works fine

I don't know what the GoLand IDE does.  I don't see any
store[0].callback or store[0].data in that code snippet.


> Though this works,
>
> store[0] = (*C.Accumulatedparams)(C.calloc(1, 
> C.sizeof_struct_Accumulatedparams))
> InitStruct := store[0]
> InitStruct.callback = (C.key_value_cb)(C.callOnMeGo_cgo)
> InitStruct.data = C.int(1)
>
> Here the code compiles successfully and there is no complain from GoLand IDE 
> as well.Binary (./main) too works fine
>
> So what i thought to do :
>
> type Store struct{
> result []*C.struct_Accumulatedparams
> data []C.int
> callback []C.key_value_cb
> }
>
> var store = Store{result: make([]*C.struct_Accumulatedparams, 2), data: 
> make([]C.int ,2), callback:make([]C.key_value_cb, 2)}
>
> func (obj Syslogparser) LoadPatternDB(opts Syslog) {
>
> patterndb_path := C.CString(opts.patterndb)
> store.result[0] = (*C.Accumulatedparams)(C.calloc(1, 
> C.sizeof_struct_Accumulatedparams)) <<<<<<
> store.callback[0] = (C.key_value_cb)(C.callOnMeGo_cgo) <<<<<
> store.data[0] = C.int(1)
> C.load_pattern_db(patterndb_path, 
> (*C.Accumulatedparams)(unsafe.Pointer(store.result[0])))
> }
>
> Here the code gets compiled successfully. But I am getting the following  
> error when I run the binary './main'
>
> 1In reload PatternDb:
> PatternDb :/home/nsaboo/Documents/goworkspace/src/poc/reload.xml
> ModulePath :usr/local/lib/syslog-ng
> fatal error: unexpected signal during runtime execution
> [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x0]
>
> runtime stack:
> runtime.throw(0x4fa203, 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(0x4b8fb0, 0xc000042cc8, 0x4d9280)
> /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc000042c98 
> sp=0xc000042c60 pc=0x404f6b
> main._Cfunc_execute_percustomer_db(0x7fb0fb5a5fa0, 0x1d5, 0x7fb0fb8259b0, 0x8)
> _cgo_gotypes.go:121 +0x45 fp=0xc000042cc8 sp=0xc000042c98 pc=0x4b5ca5
> main.Syslogparser.ParseMessagePerCustomer(0xc0000a2000, 0x36, 0x4f6b0c, 0x18, 
> 0x4f3fc4, 0x8, 0xc0000d0000, 0x1d5)
> /home/nsaboo/Documents/goworkspace/src/poc/main.go:132 +0x109 fp=0xc000042d38 
> sp=0xc000042cc8 pc=0x4b6f09
> main.perCustomerParsing(...)
> /home/nsaboo/Documents/goworkspace/src/poc/main.go:249
> main.main()
> /home/nsaboo/Documents/goworkspace/src/poc/main.go:232 +0x6e1 fp=0xc000042f98 
> sp=0xc000042d38 pc=0x4b78e1
> runtime.main()
> /usr/local/go/src/runtime/proc.go:200 +0x20c fp=0xc000042fe0 sp=0xc000042f98 
> pc=0x42cd9c
> runtime.goexit()
> /usr/local/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc000042fe8 
> sp=0xc000042fe0 pc=0x4548c1
> }
>
>
> Where am i going wrong here ?

Somewhere your C code is getting a NULL pointer dereference.

I don't see much in these questions that seems specific to Go.

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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcWPqL7wM%3D-fWntgn23-H1bZYBYg1RCLxSyzd2%2Btf7u9Rg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to