Merge remote-tracking branch 'origin/v0.8'
Conflicts: AUTHORS ChangeLog deps/uv/src/unix/pipe.c lib/http.js src/node_version.h
This commit is contained in:
commit
cb87920ba9
1
AUTHORS
1
AUTHORS
@ -415,3 +415,4 @@ Andy Burke <aburke@bitflood.org>
|
|||||||
Sugendran Ganess <sugendran@sugendran.net>
|
Sugendran Ganess <sugendran@sugendran.net>
|
||||||
Jim Schubert <james.schubert@gmail.com>
|
Jim Schubert <james.schubert@gmail.com>
|
||||||
Victor Costan <costan@gmail.com>
|
Victor Costan <costan@gmail.com>
|
||||||
|
Timothy J Fontaine <tjfontaine@gmail.com>
|
||||||
|
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2013.02.25, Version 0.8.21 (Stable)
|
||||||
|
|
||||||
|
* http: Do not free the wrong parser on socket close (isaacs)
|
||||||
|
|
||||||
|
* http: Handle hangup writes more gently (isaacs)
|
||||||
|
|
||||||
|
* zlib: fix assert on bad input (Ben Noordhuis)
|
||||||
|
|
||||||
|
* test: add TAP output to the test runner (Timothy J Fontaine)
|
||||||
|
|
||||||
|
* unix: Handle EINPROGRESS from domain sockets (Ben Noordhuis)
|
||||||
|
|
||||||
|
|
||||||
2013.02.19, Version 0.9.10 (Unstable)
|
2013.02.19, Version 0.9.10 (Unstable)
|
||||||
|
|
||||||
* V8: Upgrade to 3.15.11.15
|
* V8: Upgrade to 3.15.11.15
|
||||||
|
@ -121,6 +121,7 @@
|
|||||||
'WarningLevel': 3,
|
'WarningLevel': 3,
|
||||||
'BufferSecurityCheck': 'true',
|
'BufferSecurityCheck': 'true',
|
||||||
'ExceptionHandling': 1, # /EHsc
|
'ExceptionHandling': 1, # /EHsc
|
||||||
|
'ImageHasSafeExceptionHandlers': 0, # /SAFESEH:NO
|
||||||
'SuppressStartupBanner': 'true',
|
'SuppressStartupBanner': 'true',
|
||||||
'WarnAsError': 'false',
|
'WarnAsError': 'false',
|
||||||
},
|
},
|
||||||
|
@ -6,7 +6,9 @@ Node provides a tri-directional `popen(3)` facility through the
|
|||||||
`child_process` module.
|
`child_process` module.
|
||||||
|
|
||||||
It is possible to stream data through a child's `stdin`, `stdout`, and
|
It is possible to stream data through a child's `stdin`, `stdout`, and
|
||||||
`stderr` in a fully non-blocking way.
|
`stderr` in a fully non-blocking way. (Note that some programs use
|
||||||
|
line-buffered I/O internally. That doesn't affect node.js but it means
|
||||||
|
data you send to the child process is not immediately consumed.)
|
||||||
|
|
||||||
To create a child process use `require('child_process').spawn()` or
|
To create a child process use `require('child_process').spawn()` or
|
||||||
`require('child_process').fork()`. The semantics of each are slightly
|
`require('child_process').fork()`. The semantics of each are slightly
|
||||||
|
86
doc/blog/release/v0.8.21.md
Normal file
86
doc/blog/release/v0.8.21.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
date: Mon Feb 25 13:48:51 PST 2013
|
||||||
|
version: 0.8.21
|
||||||
|
category: release
|
||||||
|
title: Node v0.8.21 (Stable)
|
||||||
|
slug: node-v0-8-21-stable
|
||||||
|
|
||||||
|
2013.02.25, Version 0.8.21 (Stable)
|
||||||
|
|
||||||
|
* http: Do not free the wrong parser on socket close (isaacs)
|
||||||
|
|
||||||
|
* http: Handle hangup writes more gently (isaacs)
|
||||||
|
|
||||||
|
* zlib: fix assert on bad input (Ben Noordhuis)
|
||||||
|
|
||||||
|
* test: add TAP output to the test runner (Timothy J Fontaine)
|
||||||
|
|
||||||
|
* unix: Handle EINPROGRESS from domain sockets (Ben Noordhuis)
|
||||||
|
|
||||||
|
|
||||||
|
Source Code: http://nodejs.org/dist/v0.8.21/node-v0.8.21.tar.gz
|
||||||
|
|
||||||
|
Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.21/node-v0.8.21.pkg
|
||||||
|
|
||||||
|
Windows Installer: http://nodejs.org/dist/v0.8.21/node-v0.8.21-x86.msi
|
||||||
|
|
||||||
|
Windows x64 Installer: http://nodejs.org/dist/v0.8.21/x64/node-v0.8.21-x64.msi
|
||||||
|
|
||||||
|
Windows x64 Files: http://nodejs.org/dist/v0.8.21/x64/
|
||||||
|
|
||||||
|
Linux 32-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-linux-x86.tar.gz
|
||||||
|
|
||||||
|
Linux 64-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-linux-x64.tar.gz
|
||||||
|
|
||||||
|
Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-sunos-x86.tar.gz
|
||||||
|
|
||||||
|
Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-sunos-x64.tar.gz
|
||||||
|
|
||||||
|
Other release files: http://nodejs.org/dist/v0.8.21/
|
||||||
|
|
||||||
|
Website: http://nodejs.org/docs/v0.8.21/
|
||||||
|
|
||||||
|
Documentation: http://nodejs.org/docs/v0.8.21/api/
|
||||||
|
|
||||||
|
Shasums:
|
||||||
|
```
|
||||||
|
383b9009a587b7390a5a00cef4ece441fb16dd82 node-v0.8.21-darwin-x64.tar.gz
|
||||||
|
47654ca8ecc93c846e6f7493a19931b99d5e4b87 node-v0.8.21-darwin-x86.tar.gz
|
||||||
|
46d66f3b95f447811e9253d66050859b4bb81ea0 node-v0.8.21-linux-x64.tar.gz
|
||||||
|
1f16e50dacd5e942970c28be1e578e6260a116c4 node-v0.8.21-linux-x86.tar.gz
|
||||||
|
b24b5e0acc53f004122c0cb2df775c4493b1e048 node-v0.8.21-sunos-x64.tar.gz
|
||||||
|
54ca0c94dff35e941fe90d10755427a15d6519ae node-v0.8.21-sunos-x86.tar.gz
|
||||||
|
38c5855c1ebd70fde111d50343a163a03cff9765 node-v0.8.21-x86.msi
|
||||||
|
60cd1fb8f43943bd3ed7c07745df1b3e81bafc13 node-v0.8.21.pkg
|
||||||
|
8b75377eafb5e77d6dff141c9533202d5a589ce4 node-v0.8.21.tar.gz
|
||||||
|
c310779c80d21be7556ec0921d5afca8f64792eb node.exe
|
||||||
|
61b98f9dfbe70184788b6f010ce7667c9cba0fdc node.exp
|
||||||
|
78c37ac837bbb8fefd691e351b3c20f136b212ee node.lib
|
||||||
|
40cc197db5c9fc4ded4509b5ae21bc53d178998e node.pdb
|
||||||
|
ec29a824e51308349f7895c010469f8e59939094 x64/node-v0.8.21-x64.msi
|
||||||
|
e4c5563c38a01dac1a97f6366175d1fef86da262 x64/node.exe
|
||||||
|
8e51783d5e03148f01db8386102e4ffc4e30deda x64/node.exp
|
||||||
|
a6017052052bb469a50327b4f40c990c25da0932 x64/node.lib
|
||||||
|
fb8d24e5208b14d35997bc3b46e325316e6ad94d x64/node.pdb
|
||||||
|
```
|
||||||
|
|
||||||
|
Shasums:
|
||||||
|
```
|
||||||
|
62cd69928ce2da9e8512b3efb96aba353ee54a91 node-v0.8.21-darwin-x64.tar.gz
|
||||||
|
62cf9b990f8e424e7fdb1d50a46d779e4d508b23 node-v0.8.21-darwin-x86.tar.gz
|
||||||
|
83e92aec4f4a0167e7c5b3ef04388fc33712d97b node-v0.8.21-linux-x64.tar.gz
|
||||||
|
83a8aa10dafa196b372958d1052f61fe1c16c2a4 node-v0.8.21-linux-x86.tar.gz
|
||||||
|
588830b0d095c0ef3583d9f7f574426f5b456e2e node-v0.8.21-sunos-x64.tar.gz
|
||||||
|
e4eff5914432da3cf12a833aaa0444693671cca1 node-v0.8.21-sunos-x86.tar.gz
|
||||||
|
8146b2254caa814157aa511075dcf7b42d0ecb59 node-v0.8.21-x86.msi
|
||||||
|
60cd1fb8f43943bd3ed7c07745df1b3e81bafc13 node-v0.8.21.pkg
|
||||||
|
65ab7307f1aee12be4c88e396e2510967a52b1c6 node-v0.8.21.tar.gz
|
||||||
|
5d770ad554ee4a73278b2d90029e758e0a676074 node.exe
|
||||||
|
17514f32c57c64bd0d367c71ed0e6dc399fc9e12 node.exp
|
||||||
|
9404eff8562dfb0a6e0e72167278ac6131be5d3a node.lib
|
||||||
|
94908174f715d2707d48e6d53a1f96f33059f56c node.pdb
|
||||||
|
36750abf56120a63d9fa9b2b75bdc98dfac051f7 x64/node-v0.8.21-x64.msi
|
||||||
|
b61b9620e936bc9c19043a02625aed9922aeb653 x64/node.exe
|
||||||
|
21a0e855e652e7fbe84e7efc1f7a3542fa870372 x64/node.exp
|
||||||
|
f9d017c07030599e3442a958020381a37402dc81 x64/node.lib
|
||||||
|
3b35fbac0962aaff46bdd2f06412dcb1f80b9895 x64/node.pdb
|
||||||
|
```
|
84
doc/blog/release/v0.9.10.md
Normal file
84
doc/blog/release/v0.9.10.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
category: release
|
||||||
|
date: Tue Feb 19 14:00:08 PST 2013
|
||||||
|
slug: node-v0-9-10-unstable
|
||||||
|
title: Node v0.9.10 (Unstable)
|
||||||
|
version: 0.9.10
|
||||||
|
|
||||||
|
2013.02.19, Version 0.9.10 (Unstable)
|
||||||
|
|
||||||
|
* V8: Upgrade to 3.15.11.15
|
||||||
|
|
||||||
|
* npm: Upgrade to 1.2.12
|
||||||
|
|
||||||
|
* fs: Change default WriteStream config, increase perf (isaacs)
|
||||||
|
|
||||||
|
* process: streamlining tick callback logic (Trevor Norris)
|
||||||
|
|
||||||
|
* stream_wrap, udp_wrap: add read-only fd property (Ben Noordhuis)
|
||||||
|
|
||||||
|
* buffer: accept negative indices in Buffer#slice() (Ben Noordhuis)
|
||||||
|
|
||||||
|
* tls: Cycle data when underlying socket drains (isaacs)
|
||||||
|
|
||||||
|
* stream: read(0) should not always trigger _read(n,cb) (isaacs)
|
||||||
|
|
||||||
|
* stream: Empty strings/buffers do not signal EOF any longer (isaacs)
|
||||||
|
|
||||||
|
* crypto: improve cipher/decipher error messages (Ben Noordhuis)
|
||||||
|
|
||||||
|
* net: Respect the 'readable' flag on sockets (isaacs)
|
||||||
|
|
||||||
|
* net: don't suppress ECONNRESET (Ben Noordhuis)
|
||||||
|
|
||||||
|
* typed arrays: copy Buffer in typed array constructor (Ben Noordhuis)
|
||||||
|
|
||||||
|
* typed arrays: make DataView throw on non-ArrayBuffer (Ben Noordhuis)
|
||||||
|
|
||||||
|
* windows: MSI installer enhancements (Scott Blomquist, Jim Schubert)
|
||||||
|
|
||||||
|
|
||||||
|
Source Code: http://nodejs.org/dist/v0.9.10/node-v0.9.10.tar.gz
|
||||||
|
|
||||||
|
Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.10/node-v0.9.10.pkg
|
||||||
|
|
||||||
|
Windows Installer: http://nodejs.org/dist/v0.9.10/node-v0.9.10-x86.msi
|
||||||
|
|
||||||
|
Windows x64 Installer: http://nodejs.org/dist/v0.9.10/x64/node-v0.9.10-x64.msi
|
||||||
|
|
||||||
|
Windows x64 Files: http://nodejs.org/dist/v0.9.10/x64/
|
||||||
|
|
||||||
|
Linux 32-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-linux-x86.tar.gz
|
||||||
|
|
||||||
|
Linux 64-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-linux-x64.tar.gz
|
||||||
|
|
||||||
|
Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-sunos-x86.tar.gz
|
||||||
|
|
||||||
|
Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-sunos-x64.tar.gz
|
||||||
|
|
||||||
|
Other release files: http://nodejs.org/dist/v0.9.10/
|
||||||
|
|
||||||
|
Website: http://nodejs.org/docs/v0.9.10/
|
||||||
|
|
||||||
|
Documentation: http://nodejs.org/docs/v0.9.10/api/
|
||||||
|
|
||||||
|
Shasums:
|
||||||
|
```
|
||||||
|
813d5f42b156b7d64f00b86e13d26ada3ef352e5 node-v0.9.10-darwin-x64.tar.gz
|
||||||
|
99dbe66fd0fc176fb3459ffcf62212dcb27bef10 node-v0.9.10-darwin-x86.tar.gz
|
||||||
|
3a5a465238cbdbdac9786c204fd27be61ce7159a node-v0.9.10-linux-x64.tar.gz
|
||||||
|
3340ac206ec1a1f827c954efdfa1351dcfe9f419 node-v0.9.10-linux-x86.tar.gz
|
||||||
|
b920b2e57c6df1e080966fdeccbfd1b384b156d4 node-v0.9.10-sunos-x64.tar.gz
|
||||||
|
9c1744352bb1bc71f48f8aea1aff6aeefe35a394 node-v0.9.10-sunos-x86.tar.gz
|
||||||
|
f1daaafc330cc9993a3a6f7ca8b9cc870b49e75c node-v0.9.10-x86.msi
|
||||||
|
2b6c70f57c1513e8f5151785b1ac263565983918 node-v0.9.10.pkg
|
||||||
|
265542c15cf939b7c71a545758d835ed44d791d3 node-v0.9.10.tar.gz
|
||||||
|
653f24d53f411217d57ed18d73921ff4721f00dd node.exe
|
||||||
|
7d62da67a7b33628d7d90c9d5037cf564dfc5ce4 node.exp
|
||||||
|
cfebbcd81db602b2f051328a9924e19ca2cb6235 node.lib
|
||||||
|
a31694cb9e03d13a616f3cc634852d8dc98e69b8 node.pdb
|
||||||
|
5f94c1cc9301a8b85082fee7549aa376aedd8ec5 x64/node-v0.9.10-x64.msi
|
||||||
|
7716c01ce60f7c65100cc405726badf8476afebd x64/node.exe
|
||||||
|
121d4a721968ba4631d29de07e5d6c326d259b4b x64/node.exp
|
||||||
|
17f651000f6b0c840efe539ae5257cb894481c49 x64/node.lib
|
||||||
|
d04242a5ec3a3104931ec8de6a846a8f7746b1fd x64/node.pdb
|
||||||
|
```
|
@ -89,7 +89,9 @@ http.createServer(function (req, res) {
|
|||||||
}).listen(1337, '127.0.0.1');
|
}).listen(1337, '127.0.0.1');
|
||||||
console.log('Server running at http://127.0.0.1:1337/');</pre>
|
console.log('Server running at http://127.0.0.1:1337/');</pre>
|
||||||
|
|
||||||
<p>To run the server, put the code into a file <code>example.js</code> and execute it with the <code>node</code> program:</p>
|
<p>To run the server, put the code into a file
|
||||||
|
<code>example.js</code> and execute it with the
|
||||||
|
<code>node</code> program from the command line:</p>
|
||||||
<pre class="sh_none">
|
<pre class="sh_none">
|
||||||
% node example.js
|
% node example.js
|
||||||
Server running at http://127.0.0.1:1337/</pre>
|
Server running at http://127.0.0.1:1337/</pre>
|
||||||
|
28
lib/http.js
28
lib/http.js
@ -437,6 +437,7 @@ function OutgoingMessage() {
|
|||||||
this._trailer = '';
|
this._trailer = '';
|
||||||
|
|
||||||
this.finished = false;
|
this.finished = false;
|
||||||
|
this._hangupClose = false;
|
||||||
}
|
}
|
||||||
util.inherits(OutgoingMessage, Stream);
|
util.inherits(OutgoingMessage, Stream);
|
||||||
|
|
||||||
@ -491,14 +492,24 @@ OutgoingMessage.prototype._writeRaw = function(data, encoding) {
|
|||||||
return this.connection.write(data, encoding);
|
return this.connection.write(data, encoding);
|
||||||
} else if (this.connection && this.connection.destroyed) {
|
} else if (this.connection && this.connection.destroyed) {
|
||||||
// The socket was destroyed. If we're still trying to write to it,
|
// The socket was destroyed. If we're still trying to write to it,
|
||||||
// then something bad happened.
|
// then something bad happened, but it could be just that we haven't
|
||||||
// If we've already raised an error on this message, then just ignore.
|
// gotten the 'close' event yet.
|
||||||
// XXX This was necessary in v0.8, but in v0.10, we no longer ignore
|
//
|
||||||
// ECONNRESET anyway. Is this still required?
|
// In v0.10 and later, this isn't a problem, since ECONNRESET isn't
|
||||||
if (!this._hadError) {
|
// ignored in the first place. We'll probably emit 'close' on the
|
||||||
this.emit('error', createHangUpError());
|
// next tick, but just in case it's not coming, set a timeout that
|
||||||
this._hadError = true;
|
// will emit it for us.
|
||||||
|
if (!this._hangupClose) {
|
||||||
|
this._hangupClose = true;
|
||||||
|
var socket = this.socket;
|
||||||
|
var timer = setTimeout(function() {
|
||||||
|
socket.emit('close');
|
||||||
|
});
|
||||||
|
socket.on('close', function() {
|
||||||
|
clearTimeout(timer);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
// buffer, as long as we're not destroyed.
|
// buffer, as long as we're not destroyed.
|
||||||
this._buffer(data, encoding);
|
this._buffer(data, encoding);
|
||||||
@ -1810,7 +1821,8 @@ function connectionListener(socket) {
|
|||||||
function serverSocketCloseListener() {
|
function serverSocketCloseListener() {
|
||||||
debug('server socket close');
|
debug('server socket close');
|
||||||
// mark this parser as reusable
|
// mark this parser as reusable
|
||||||
freeParser(parser);
|
if (this.parser)
|
||||||
|
freeParser(this.parser);
|
||||||
|
|
||||||
abortIncoming();
|
abortIncoming();
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,22 @@ void InitZlib(v8::Handle<v8::Object> target);
|
|||||||
class ZCtx : public ObjectWrap {
|
class ZCtx : public ObjectWrap {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ZCtx(node_zlib_mode mode) : ObjectWrap(), dictionary_(NULL), mode_(mode) {}
|
ZCtx(node_zlib_mode mode)
|
||||||
|
: ObjectWrap()
|
||||||
|
, init_done_(false)
|
||||||
|
, level_(0)
|
||||||
|
, windowBits_(0)
|
||||||
|
, memLevel_(0)
|
||||||
|
, strategy_(0)
|
||||||
|
, err_(0)
|
||||||
|
, dictionary_(NULL)
|
||||||
|
, dictionary_len_(0)
|
||||||
|
, flush_(0)
|
||||||
|
, chunk_size_(0)
|
||||||
|
, write_in_progress_(false)
|
||||||
|
, mode_(mode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
~ZCtx() {
|
~ZCtx() {
|
||||||
@ -108,6 +123,7 @@ class ZCtx : public ObjectWrap {
|
|||||||
|
|
||||||
assert(!ctx->write_in_progress_ && "write already in progress");
|
assert(!ctx->write_in_progress_ && "write already in progress");
|
||||||
ctx->write_in_progress_ = true;
|
ctx->write_in_progress_ = true;
|
||||||
|
ctx->Ref();
|
||||||
|
|
||||||
assert(!args[0]->IsUndefined() && "must provide flush value");
|
assert(!args[0]->IsUndefined() && "must provide flush value");
|
||||||
|
|
||||||
@ -167,8 +183,6 @@ class ZCtx : public ObjectWrap {
|
|||||||
ZCtx::Process,
|
ZCtx::Process,
|
||||||
ZCtx::After);
|
ZCtx::After);
|
||||||
|
|
||||||
ctx->Ref();
|
|
||||||
|
|
||||||
return ctx->handle_;
|
return ctx->handle_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,6 +297,7 @@ class ZCtx : public ObjectWrap {
|
|||||||
MakeCallback(ctx->handle_, onerror_sym, ARRAY_SIZE(args), args);
|
MakeCallback(ctx->handle_, onerror_sym, ARRAY_SIZE(args), args);
|
||||||
|
|
||||||
// no hope of rescue.
|
// no hope of rescue.
|
||||||
|
ctx->write_in_progress_ = false;
|
||||||
ctx->Unref();
|
ctx->Unref();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,15 +75,6 @@ server.listen(common.PORT, function() {
|
|||||||
var writes = 0;
|
var writes = 0;
|
||||||
var sawFalseWrite;
|
var sawFalseWrite;
|
||||||
|
|
||||||
var gotError = false;
|
|
||||||
sec.on('error', function(er) {
|
|
||||||
assert.equal(gotError, false);
|
|
||||||
gotError = true;
|
|
||||||
assert(er.code === 'ECONNRESET');
|
|
||||||
clearTimeout(timer);
|
|
||||||
test();
|
|
||||||
});
|
|
||||||
|
|
||||||
function write() {
|
function write() {
|
||||||
if (++writes === 64) {
|
if (++writes === 64) {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
@ -121,7 +112,7 @@ server.listen(common.PORT, function() {
|
|||||||
console.error('bad happened', sec.output, sec.outputEncodings);
|
console.error('bad happened', sec.output, sec.outputEncodings);
|
||||||
assert.equal(sec.output.length, 0);
|
assert.equal(sec.output.length, 0);
|
||||||
assert.equal(sec.outputEncodings, 0);
|
assert.equal(sec.outputEncodings, 0);
|
||||||
assert(gotError);
|
assert(sawFalseWrite);
|
||||||
assert(gotFirstResponse);
|
assert(gotFirstResponse);
|
||||||
assert(gotFirstData);
|
assert(gotFirstData);
|
||||||
assert(gotFirstEnd);
|
assert(gotFirstEnd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user