GeezerVison is showing github.com — net: fix timeout with null handle · nodejs/node@a09e2fd
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: lib/net.js +9-7Lines changed: 9 additions & 7 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -334,13 +334,15 @@ Socket.prototype.setTimeout = function(msecs, callback) { |
334 | 334 |
|
335 | 335 |
|
336 | 336 | Socket.prototype._onTimeout = function() { |
337 | | - // `.prevWriteQueueSize` !== `.updateWriteQueueSize()` means there is |
338 | | - // an active write in progress, so we suppress the timeout. |
339 | | - const prevWriteQueueSize = this._handle.writeQueueSize; |
340 | | - if (prevWriteQueueSize > 0 && |
341 | | - prevWriteQueueSize !== this._handle.updateWriteQueueSize()) { |
342 | | - this._unrefTimer(); |
343 | | - return; |
| 337 | + if (this._handle) { |
| 338 | + // `.prevWriteQueueSize` !== `.updateWriteQueueSize()` means there is |
| 339 | + // an active write in progress, so we suppress the timeout. |
| 340 | + const prevWriteQueueSize = this._handle.writeQueueSize; |
| 341 | + if (prevWriteQueueSize > 0 && |
| 342 | + prevWriteQueueSize !== this._handle.updateWriteQueueSize()) { |
| 343 | + this._unrefTimer(); |
| 344 | + return; |
| 345 | + } |
344 | 346 | } |
345 | 347 | debug('_onTimeout'); |
346 | 348 | this.emit('timeout'); |
|
Collapse file
Copy file name to clipboard +17Lines changed: 17 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +const common = require('../common'); |
| 4 | +const net = require('net'); |
| 5 | +const assert = require('assert'); |
| 6 | + |
| 7 | +const socket = new net.Socket(); |
| 8 | +socket.setTimeout(common.platformTimeout(50)); |
| 9 | + |
| 10 | +socket.on('timeout', common.mustCall(() => { |
| 11 | + assert.strictEqual(socket._handle, null); |
| 12 | +})); |
| 13 | + |
| 14 | +socket.on('connect', common.mustNotCall()); |
| 15 | + |
| 16 | +// since the timeout is unrefed, the code will exit without this |
| 17 | +setTimeout(() => {}, common.platformTimeout(200)); |