docs: function spawn(f, next, error, logger) {
    // XXX: logger is explicitly omitted from the documentation since this is 
    //      just a temporary fix
    var fiberFunction = function(fiberId) {
      var ret = undefined
      try {
        ret = f()
        if (next) {
          return next(ret)
        } else {
          // drop it
        }
      } catch (e) {
        (logger || debug)(e.stack)
        if (error) {
          // if there's an error callback then throw it that way
          return error(e)
        } else {
          throw e
        }
      } finally {
        // clean up
        var fiber_ = _spawnBookkeeping._fibers[fiberId]
        if (typeof fiber_ === 'undefined') {
          throw new Error('Failed to find current fiber in spawn.fibers')
        }
        // remove our handle on this fiber so that it will get garbage collected
        delete _spawnBookkeeping._fibers[fiberId]
        --_spawnBookkeeping._fibers._length
      }
    }
  
    var fiberId = _spawnBookkeeping._getFiberId()
  
    var fiber = new Fiber(fiberFunction.bind(undefined, fiberId))
  
    // maintain a handle for this fiber so it doesn't get garbage collected
    _spawnBookkeeping._fibers[fiberId] = fiber
    ++_spawnBookkeeping._fibers._length
  
    // otherwise, run async on nextTick
    process.nextTick(function(fiber) {
      try {
        fiber.run()
      } catch (e) {
        // we will only get here if next is defined, but error is not
        // assume that the caller doesn't care if there is an error, but log
        // to `debug` in case
        (logger || debug)(
          'Exception caught with error undefined in fibers.spawn: ' + inspect(e))
      }
    }.bind(undefined, fiber))
  }