Skip to content

Instantly share code, notes, and snippets.

@postwait
Created March 14, 2011 18:16
Show Gist options
  • Select an option

  • Save postwait/869576 to your computer and use it in GitHub Desktop.

Select an option

Save postwait/869576 to your computer and use it in GitHub Desktop.
crazy variant
diff --git a/lib/tls.js b/lib/tls.js
index a951c97..78e191c 100644
--- a/lib/tls.js
+++ b/lib/tls.js
@@ -509,32 +509,44 @@ exports.createSecurePair = function(credentials,
* completed negotiation and emit 'secure' from here if it has.
*/
SecurePair.prototype._cycle = function() {
+ depth = depth ? depth : 0;
if (this._done) {
return;
}
- // Make this function reentrant.
- if (this._cycleLock) return;
- this._cycleLock = true;
- this._writeCalled = false;
+ if(depth == 0) this._writeCalled = false;
var established = this._secureEstablished;
- this.encrypted._pull();
- this.cleartext._pull();
- this.cleartext._push();
- this.encrypted._push();
-
- this._cycleLock = false;
+ if(!this._cycleEncryptedPullLock) {
+ this._cycleEncryptedPullLock = true;
+ this.encrypted._pull();
+ this._cycleEncryptedPullLock = false;
+ }
+ if(!this._cycleCleartextPullLock) {
+ this._cycleCleartextPullLock = true;
+ this.cleartext._pull();
+ this._cycleCleartextPullLock = false;
+ }
+ if(!this._cycleCleartextPushLock) {
+ this._cycleCleartextPushLock = true;
+ this.cleartext._push();
+ this._cycleCleartextPushLock = false;
+ }
+ if(!this._cycleEncryptedPushLock) {
+ this._cycleEncryptedPushLock = true;
+ this.encrypted._push();
+ this._cycleEncryptedPushLock = false;
+ }
if (this._done) {
return;
}
- if ((!established && this._secureEstablished) || this._writeCalled) {
+ if ((!established && this._secureEstablished) || (depth == 0 && this._writeCalled)) {
// If we were not established but now we are, let's cycle again.
// Or if there is some data to write...
- this._cycle();
+ this._cycle(depth+1);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment