func newGAsyncReadyCallback(f interface{}) (cCallback C.GAsyncReadyCallback, userData C.gpointer, err error) { rf := reflect.ValueOf(f) if rf.Kind() != reflect.Func { return nil, nil, errors.New("f is not a function") } cbinfo := &garCallback{rf} return C.GAsyncReadyCallback(C._gasyncreadycallback_call), C.gpointer(unsafe.Pointer(cbinfo)), nil }
func newGAsyncReadyCallback(f interface{}) (cCallback C.GAsyncReadyCallback, userData C.gpointer, err error) { rf := reflect.ValueOf(f) if rf.Kind() != reflect.Func { return nil, nil, errors.New("f is not a function") } cbinfo := &garCallback{rf} cbinfoRaw := C.gpointer(unsafe.Pointer(cbinfo)) // protect callback from Garbage collection protectMapLock.Lock() callbackProtectMap[cbinfoRaw] = cbinfo protectMapLock.Unlock() return C.GAsyncReadyCallback(C._gasyncreadycallback_call), cbinfoRaw, nil }