@@ -7,8 +7,19 @@ var Buffer = require('buffer').Buffer
7
7
var Queue = require ( './queue' )
8
8
9
9
// Node.js version
10
+ var match = / ^ v ( \d + ) \. ( \d + ) \. / . exec ( process . version )
11
+ var version = match ? Number ( match [ 1 ] ) + Number ( '0.' + match [ 2 ] ) : 11
12
+ var onreadMode = version >= 11.1 ? 2 : 1
10
13
var mode = 'modern'
11
14
15
+ var setNRead
16
+ if ( onreadMode === 2 ) {
17
+ var sw = process . binding ( 'stream_wrap' )
18
+ setNRead = function ( nread ) {
19
+ sw . streamBaseState [ sw . kReadBytesOrError ] = nread
20
+ }
21
+ }
22
+
12
23
function Handle ( stream , options ) {
13
24
EventEmitter . call ( this )
14
25
@@ -31,6 +42,15 @@ Handle.create = function create (stream, options) {
31
42
return new Handle ( stream , options )
32
43
}
33
44
45
+ Handle . prototype . _onread = function _onread ( nread , buffer ) {
46
+ if ( onreadMode === 1 ) {
47
+ this . onread ( nread , buffer )
48
+ } else {
49
+ setNRead ( nread )
50
+ this . onread ( buffer )
51
+ }
52
+ }
53
+
34
54
Handle . prototype . _queueReq = function _queueReq ( type , req ) {
35
55
return this . pending . append ( type , req )
36
56
}
@@ -81,17 +101,17 @@ var uv = process.binding('uv')
81
101
Handle . prototype . _flow = function flow ( ) {
82
102
var self = this
83
103
this . _stream . on ( 'data' , function ( chunk ) {
84
- self . onread ( chunk . length , chunk )
104
+ self . _onread ( chunk . length , chunk )
85
105
} )
86
106
87
107
this . _stream . on ( 'end' , function ( ) {
88
- self . onread ( uv . UV_EOF , Buffer . alloc ( 0 ) )
108
+ self . _onread ( uv . UV_EOF , Buffer . alloc ( 0 ) )
89
109
} )
90
110
91
111
this . _stream . on ( 'close' , function ( ) {
92
112
setImmediate ( function ( ) {
93
113
if ( self . _reading ) {
94
- self . onread ( uv . UV_ECONNRESET , Buffer . alloc ( 0 ) )
114
+ self . _onread ( uv . UV_ECONNRESET , Buffer . alloc ( 0 ) )
95
115
}
96
116
} )
97
117
} )
0 commit comments