| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 
							- var test = require('tap').test
 
- var fs = require('../')
 
- test('open lots of stuff', function (t) {
 
-   // Get around EBADF from libuv by making sure that stderr is opened
 
-   // Otherwise Darwin will refuse to give us a FD for stderr!
 
-   process.stderr.write('')
 
-   // How many parallel open()'s to do
 
-   var n = 1024
 
-   var opens = 0
 
-   var fds = []
 
-   var going = true
 
-   var closing = false
 
-   var doneCalled = 0
 
-   for (var i = 0; i < n; i++) {
 
-     go()
 
-   }
 
-   function go() {
 
-     opens++
 
-     fs.open(__filename, 'r', function (er, fd) {
 
-       if (er) throw er
 
-       fds.push(fd)
 
-       if (going) go()
 
-     })
 
-   }
 
-   // should hit ulimit pretty fast
 
-   setTimeout(function () {
 
-     going = false
 
-     t.equal(opens - fds.length, n)
 
-     done()
 
-   }, 100)
 
-   function done () {
 
-     if (closing) return
 
-     doneCalled++
 
-     if (fds.length === 0) {
 
-       console.error('done called %d times', doneCalled)
 
-       // First because of the timeout
 
-       // Then to close the fd's opened afterwards
 
-       // Then this time, to complete.
 
-       // Might take multiple passes, depending on CPU speed
 
-       // and ulimit, but at least 3 in every case.
 
-       t.ok(doneCalled >= 2)
 
-       return t.end()
 
-     }
 
-     closing = true
 
-     setTimeout(function () {
 
-       // console.error('do closing again')
 
-       closing = false
 
-       done()
 
-     }, 100)
 
-     // console.error('closing time')
 
-     var closes = fds.slice(0)
 
-     fds.length = 0
 
-     closes.forEach(function (fd) {
 
-       fs.close(fd, function (er) {
 
-         if (er) throw er
 
-       })
 
-     })
 
-   }
 
- })
 
 
  |