function finish () {
      kill()
      gc() // now ensure the inner "cb" Buffer is collected

      // should throw an Error asynchronously!,
      // because the callback has been garbage collected.

      // hijack the "uncaughtException" event for this test
      var listeners = process.listeners('uncaughtException').slice()
      process.removeAllListeners('uncaughtException')
      process.once('uncaughtException', function (e) {
        var err
        try {
          assert(/ffi/.test(e.message))
        } catch (ae) {
          err = ae
        }
        done(err)

        listeners.forEach(function (fn) {
          process.on('uncaughtException', fn)
        })
      })

      bindings.call_cb_from_thread()
    }
We should make sure that callbacks or errors gets propagated back to node's main thread
when it called on a non libuv native thread.
See: https://github.com/node-ffi/node-ffi/issues/199