@@ -25,6 +25,13 @@ function isWritable(stream) {
25
25
! ! stream . _writableState ;
26
26
}
27
27
28
+ function isWritableFinished ( stream ) {
29
+ if ( stream . writableFinished ) return true ;
30
+ const wState = stream . _writableState ;
31
+ if ( ! wState || wState . errored ) return false ;
32
+ return wState . finished || ( wState . ended && wState . length === 0 ) ;
33
+ }
34
+
28
35
function eos ( stream , opts , callback ) {
29
36
if ( arguments . length === 2 ) {
30
37
callback = opts ;
@@ -49,10 +56,11 @@ function eos(stream, opts, callback) {
49
56
if ( ! stream . writable ) onfinish ( ) ;
50
57
} ;
51
58
52
- let writableEnded = stream . _writableState && stream . _writableState . finished ;
59
+ let writableFinished = stream . writableFinished ||
60
+ ( stream . _writableState && stream . _writableState . finished ) ;
53
61
const onfinish = ( ) => {
54
62
writable = false ;
55
- writableEnded = true ;
63
+ writableFinished = true ;
56
64
if ( ! readable ) callback . call ( stream ) ;
57
65
} ;
58
66
@@ -75,8 +83,8 @@ function eos(stream, opts, callback) {
75
83
err = new ERR_STREAM_PREMATURE_CLOSE ( ) ;
76
84
return callback . call ( stream , err ) ;
77
85
}
78
- if ( writable && ! writableEnded ) {
79
- if ( ! stream . _writableState || ! stream . _writableState . ended )
86
+ if ( writable && ! writableFinished ) {
87
+ if ( ! isWritableFinished ( stream ) )
80
88
err = new ERR_STREAM_PREMATURE_CLOSE ( ) ;
81
89
return callback . call ( stream , err ) ;
82
90
}
0 commit comments