
module.exports = function () {
  var _read, cbs = [], _end

  var read = function (end, cb) {
    if(!_read) {
      _end = end
      cbs.push(cb)
    } 
    else _read(end, cb)
  }
  read.resolve = function (read) {
    if(_read) throw new Error('already resolved')
    _read = read
    if(!_read) throw new Error('no read cannot resolve!' + _read)
    while(cbs.length)
      _read(_end, cbs.shift())
  }
  read.abort = function(err) {
    read.resolve(function (_, cb) {
      cb(err || true)
    })
  }
  return read
}


@@ -42,16 +42,20 @@
 ad, 
+_
 cb
-s = %5B%5D
+, abortCb
 , _e
@@ -105,24 +105,42 @@
 f(!_read) %7B%0A
+      if(end) %7B%0A  
       _end =
@@ -154,27 +154,64 @@
     
-cbs.push(
+  abortCb = cb%0A      %7D%0A      else%0A        _cb = 
 cb
-)
 %0A    %7D
- 
 %0A   
@@ -411,55 +411,66 @@
     
-while(cbs.length)%0A      _read(_end, cbs.shift()
+if(_cb) read(null, _cb)%0A    if(abortCb) read(_end, abortCb
 )%0A  

handle abort edge case correctly, including if there is both a read and an abort before the stream is connected, also, dont use an array, since there will only be 2 cbs max