don't pass Go pointer to Go pointer to cgo
don't pass Go pointer to Go pointer to cgo

Starting with Go 1.6, it is illegal to pass a Go pointer to a Go pointer
into cgo calls. A recommended work around is described here:

https://github.com/golang/proposal/blob/master/design/12416-cgo-pointers.md

         A particular unsafe area is C code that wants to hold on to Go func
         and pointer values for future callbacks from C to Go. This works today
         but is not permitted by the invariant. It is hard to detect. One safe
         approach is: Go code that wants to preserve funcs/pointers stores them
         into a map indexed by an int. Go code calls the C code, passing the
         int, which the C code may store freely. When the C code wants to call
         into Go, it passes the int to a Go function that looks in the map and
         makes the call. An explicit call is required to release the value from
         the map if it is no longer needed, but that was already true before.

fsnotify/fsevents,go-fsnotify/fsevents