(stream, fn)
| 3244 | } |
| 3245 | |
| 3246 | function onFinished(stream, fn) { |
| 3247 | |
| 3248 | if (stream.$onFinished) { |
| 3249 | fn && fn(); |
| 3250 | fn = null; |
| 3251 | return; |
| 3252 | } |
| 3253 | |
| 3254 | if (stream.$onFinishedQueue) { |
| 3255 | if (stream.$onFinishedQueue instanceof Array) |
| 3256 | stream.$onFinishedQueue.push(fn); |
| 3257 | else |
| 3258 | stream.$onFinishedQueue = [stream.$onFinishedQueue, fn]; |
| 3259 | return; |
| 3260 | } else |
| 3261 | stream.$onFinishedQueue = fn; |
| 3262 | |
| 3263 | var callback = function() { |
| 3264 | !stream.$onFinished && (stream.$onFinished = true); |
| 3265 | if (stream.$onFinishedQueue instanceof Array) { |
| 3266 | while (stream.$onFinishedQueue.length) |
| 3267 | stream.$onFinishedQueue.shift()(); |
| 3268 | stream.$onFinishedQueue = null; |
| 3269 | } else if (stream.$onFinishedQueue) { |
| 3270 | stream.$onFinishedQueue(); |
| 3271 | stream.$onFinishedQueue = null; |
| 3272 | } |
| 3273 | }; |
| 3274 | |
| 3275 | if (isFinished(stream)) { |
| 3276 | setImmediate(callback); |
| 3277 | } else { |
| 3278 | |
| 3279 | if (stream.socket) { |
| 3280 | if (!stream.socket.$totalstream) { |
| 3281 | stream.socket.$totalstream = stream; |
| 3282 | if (stream.socket.prependListener) { |
| 3283 | stream.socket.prependListener('error', callback); |
| 3284 | stream.socket.prependListener('close', callback); |
| 3285 | } else { |
| 3286 | stream.socket.on('error', callback); |
| 3287 | stream.socket.on('close', callback); |
| 3288 | } |
| 3289 | } |
| 3290 | } |
| 3291 | |
| 3292 | if (stream.prependListener) { |
| 3293 | stream.prependListener('error', callback); |
| 3294 | stream.prependListener('end', callback); |
| 3295 | stream.prependListener('close', callback); |
| 3296 | stream.prependListener('aborted', callback); |
| 3297 | stream.prependListener('finish', callback); |
| 3298 | } else { |
| 3299 | stream.on('error', callback); |
| 3300 | stream.on('end', callback); |
| 3301 | stream.on('close', callback); |
| 3302 | stream.on('aborted', callback); |
| 3303 | stream.on('finish', callback); |
no test coverage detected