Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

net.Socket: Delay pause/resume until after connect

Fix #3118
  • Loading branch information...
commit de65ba7aba0e48a846e8cad86278f51372d3de23 1 parent 196207c
@isaacs isaacs authored
Showing with 48 additions and 0 deletions.
  1. +18 −0 lib/net.js
  2. +30 −0 test/simple/test-net-socket-pause-resume-immediate.js
View
18 lib/net.js
@@ -236,6 +236,12 @@ Object.defineProperty(Socket.prototype, 'bufferSize', {
Socket.prototype.pause = function() {
+ if (this._paused) return;
+ this._paused = true;
+ if (this._connecting) {
+ // will actually pause once the handle is established.
+ return;
+ }
if (this._handle) {
this._handle.readStop();
}
@@ -243,6 +249,12 @@ Socket.prototype.pause = function() {
Socket.prototype.resume = function() {
+ if (!this._paused) return;
+ this._paused = false;
+ if (this._connecting) {
+ // will actually resume once the handle is established.
+ return;
+ }
if (this._handle) {
this._handle.readStart();
}
@@ -733,6 +745,12 @@ function afterConnect(status, handle, req, readable, writable) {
assert.ok(self._connecting);
self._connecting = false;
+ // now that we're connected, process any pending pause state.
+ if (self._paused) {
+ self._paused = false;
+ self.pause();
+ }
+
if (status == 0) {
self.readable = readable;
self.writable = writable;
View
30 test/simple/test-net-socket-pause-resume-immediate.js
@@ -0,0 +1,30 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common');
+var assert = require('assert');
+var net = require('net');
+
+var sock = net.connect(1234, 'localhost');
+sock.pause();
+sock.resume();
+console.log('ok');
+process.exit(0);
Please sign in to comment.
Something went wrong with that request. Please try again.