platform/upstream/nodejs.git
10 years agodeps: fix up v8 postmortem codegen
Ben Noordhuis [Mon, 12 May 2014 03:38:47 +0000 (05:38 +0200)]
deps: fix up v8 postmortem codegen

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agov8: Upgrade 3.26.33 with 14 patches
Trevor Norris [Tue, 9 Sep 2014 21:03:08 +0000 (14:03 -0700)]
v8: Upgrade 3.26.33 with 14 patches

V8 3.26.31 has received 14 patches since the upgrade to 3.26.33. Since
3.26.33 is technically a tag on the 3.27 branch, reverting back to
3.26.31 would remove now default functionality like WeakMaps. Because of
that the patches have simply been cherry-picked and squashed.

Here is a summary of all patches:

* Fix index register assignment in LoadFieldByIndex for arm, arm64, and
  mips.
* Fix invalid attributes when generalizing because of incompatible map
  change.
* Skip write barriers when updating the weak hash table.
* MIPS: Avoid HeapObject check in HStoreNamedField.
* Do GC if CodeRange fails to allocate a block.
* Array.concat: properly go to dictionary mode when required.
* Keep CodeRange::current_allocation_block_index_ in range.
* Grow heap slower if GC freed many global handles.
* Do not eliminate bounds checks for "<const> - x".
* Add missing map check to optimized f.apply(...).
* In GrowMode, force the value to the right representation to avoid
  deopts between storing the length and storing the value.
* Reduce max executable size limit.
* Fix invalid condition in check elimination effects.
* Fix off-by-one error in Array.concat slow mode check.

For more information see: https://github.com/v8/v8/commits/3.26

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agotls: `checkServerIdentity` option
Trevor Livingston [Fri, 5 Sep 2014 14:56:55 +0000 (09:56 -0500)]
tls: `checkServerIdentity` option

Allow overriding `checkServerIdentity` function, when connecting to a
TLS server.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agosrc: remove Environment::GetCurrentChecked()
Ben Noordhuis [Fri, 5 Sep 2014 15:33:28 +0000 (17:33 +0200)]
src: remove Environment::GetCurrentChecked()

There is only one call site that uses it and that can do the checks
itself.  Removes ~15 lines of code.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agolib: unexport http.parsers
Ben Noordhuis [Fri, 22 Aug 2014 23:25:40 +0000 (01:25 +0200)]
lib: unexport http.parsers

Unexport the http.parsers freelist.  It was originally exported by Ryan
in commit 0003c701 but the commit log doesn't mention why and it's never
been documented.  It's unclear if there are any users.

The lifecycle of parser objects changed recently and it seems better to
not let people shoot themselves in the foot so easily.

If it turns out there are actually users, we can always re-export it
again - probably under a slightly different name, to force people to
update their code to the new way of things.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agolib: http: poison parser references after freeing
Ben Noordhuis [Fri, 22 Aug 2014 22:57:45 +0000 (00:57 +0200)]
lib: http: poison parser references after freeing

Make it a little harder to slip in use-after-free bugs by nulling out
references to the parser object after handing it off to freeParser().

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agosrc: update and expand comments in base-object.h
Ben Noordhuis [Fri, 22 Aug 2014 22:33:04 +0000 (00:33 +0200)]
src: update and expand comments in base-object.h

It's safe to call BaseObject::object() from your destructor _unless_
the handle is weak; then it's the weak callback that is calling your
destructor and the object will have been released by the time the
destructor runs.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agolib, src: don't make http parser handles weak
Ben Noordhuis [Fri, 22 Aug 2014 22:31:44 +0000 (00:31 +0200)]
lib, src: don't make http parser handles weak

Weak handles put strain on the garbage collector and the parser handle
doesn't need to be weak in the first place.  This change should improve
GC times on busy servers a little.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agosrc: add ClearWrap() to util.h
Ben Noordhuis [Thu, 4 Sep 2014 02:23:03 +0000 (04:23 +0200)]
src: add ClearWrap() to util.h

Counterpart to Wrap(), clears the previously assigned internal field.
Will be used in an upcoming commit.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agosrc: fix handle leak in Parser::Execute()
Ben Noordhuis [Fri, 22 Aug 2014 21:57:46 +0000 (23:57 +0200)]
src: fix handle leak in Parser::Execute()

Fix a resource leak where an intermediate Local<Context> handle in
Environment::GetCurrent() got leaked into whatever HandleScope was
further up the stack.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agolib: improved forEach object performance
Majid Arif Siddiqui [Thu, 14 Aug 2014 03:15:24 +0000 (11:15 +0800)]
lib: improved forEach object performance

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agotest: listen on exclusive port in cluster workers
cjihrig [Thu, 4 Sep 2014 15:10:44 +0000 (11:10 -0400)]
test: listen on exclusive port in cluster workers

Test that listening on exclusive ports with the cluster module works
correctly.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agonet,dgram: workers can listen on exclusive ports
cjihrig [Fri, 22 Aug 2014 20:51:53 +0000 (16:51 -0400)]
net,dgram: workers can listen on exclusive ports

Allow cluster workers to listen on exclusive ports for TCP and UDP,
instead of forcing all calls to go through the cluster master.

Fixes: #3856
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
10 years agosrc: be more intelligent about use of "arguments"
Trevor Norris [Wed, 3 Sep 2014 21:24:50 +0000 (14:24 -0700)]
src: be more intelligent about use of "arguments"

Use 'use strict' when there are named arguments and the arguments object
is passed to apply(). Also pass named arguments to call() when the named
argument is modified by the function.

Suggested in
https://github.com/joyent/node/pull/8302#issuecomment-54331801

Confirmed in
https://github.com/joyent/node/pull/8302#issuecomment-54364818

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agotls: support multiple keys/certs
Fedor Indutny [Mon, 1 Sep 2014 14:44:57 +0000 (18:44 +0400)]
tls: support multiple keys/certs

Required to serve website with both ECDSA/RSA certificates.

10 years agotls_wrap: fix use after free
Fedor Indutny [Mon, 1 Sep 2014 14:44:07 +0000 (18:44 +0400)]
tls_wrap: fix use after free

Do not free TLSCallbacks from StreamWrap. TLSCallbacks is bound to a V8
object and should be collected by V8's GC.

10 years agocrypto: use less memory for storing keys
Fedor Indutny [Mon, 1 Sep 2014 12:07:45 +0000 (16:07 +0400)]
crypto: use less memory for storing keys

Use `BIO_new_mem_buf` where possible to reduce memory usage and
initialization costs.

10 years agonet: Improve Socket.prototype.write()
Jackson Tian [Mon, 1 Sep 2014 14:44:19 +0000 (22:44 +0800)]
net: Improve Socket.prototype.write()

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agostream_wrap: Add support to write binary strings
Trevor Norris [Wed, 3 Sep 2014 10:36:17 +0000 (03:36 -0700)]
stream_wrap: Add support to write binary strings

node::StringBytes::Write() has appropriate support to write strings with
'binary' encoding. So expose that API through StreamWrap and allow
inheriting classes to use it.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agonode,async-wrap: verify domain enter/exit are set
Trevor Norris [Tue, 2 Sep 2014 18:30:45 +0000 (11:30 -0700)]
node,async-wrap: verify domain enter/exit are set

The REPL global object lazy loads modules by placing getters for each.
This causes MakeDomainCallback() to be run if a native module is loaded
from the REPL, but if the domain module hasn't been loaded then there
are no enter/exit callbacks to be called. Causing an assert() to fail.

Fix the issue by conditionally running the callback instead of asserting
it is available. Also add "addon" test to verify the fix.

Fixes: #8231
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agoconfigure: generate a fully statically linked exec
Jesús Leganés Combarro "piranna [Sat, 23 Aug 2014 21:01:06 +0000 (23:01 +0200)]
configure: generate a fully statically linked exec

Allow to create an executable with no external dynamic libraries, also the
ones from the system. This is somewhat dependent of the used C lib, for
example glibc has some internal dynamic libraries loaded by itself, but for
other ones like eglibc or dietlib, this would produce a true static linked
executable. This can be of interest for embebers or resource constraints
platforms, but the main reason for this is to allow to use a Javascript
file as Linux kernel 'init' on NodeOS.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocluster: centralize removal from workers list.
Julien Gilli [Sat, 16 Aug 2014 00:20:32 +0000 (17:20 -0700)]
cluster: centralize removal from workers list.

Currently, cluster workers can be removed from the workers list in three
different places:
- In the exit event handler for the worker process.
- In the disconnect event handler of the worker process.
- In the disconnect event handler of the cluster master.

However, handles for a given worker are cleaned up only in one of these
places: in the cluster master's disconnect event handler.

Because these events happen asynchronously, it is possible that the
workers list is empty before we even clean up one handle. This makes
the assert that makes sure that no handle is left when the workers
list is empty fail.

This commit removes the worker from the cluster.workers list only when
the worker is dead _and_ disconnected, at which point we're sure that
its associated handles are cleaned up.

Fixes #8191 and #8192.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: unsigned value can't be negative
Brian White [Tue, 2 Sep 2014 13:27:33 +0000 (09:27 -0400)]
crypto: unsigned value can't be negative

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: avoid memory leak
Brian White [Tue, 2 Sep 2014 13:26:14 +0000 (09:26 -0400)]
crypto: avoid memory leak

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agosrc: reading/owner/onread/onconnection for tcp
Jackson Tian [Sat, 23 Aug 2014 14:48:13 +0000 (22:48 +0800)]
src: reading/owner/onread/onconnection for tcp

Initialize fields to avoid Hidden Class creation in runtime.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: wrap ECDH constants in HAVE_OPENSSL
Isaac Burns [Fri, 29 Aug 2014 19:47:42 +0000 (14:47 -0500)]
crypto: wrap ECDH constants in HAVE_OPENSSL

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agotls: add DHE-RSA-AES128-SHA256 to the def ciphers
Shigeki Ohtsu [Thu, 28 Aug 2014 07:51:42 +0000 (16:51 +0900)]
tls: add DHE-RSA-AES128-SHA256 to the def ciphers

`!EDH` is also removed from the list in the discussion of #8272

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agotls, crypto: add DHE support
Shigeki Ohtsu [Wed, 27 Aug 2014 09:00:13 +0000 (18:00 +0900)]
tls, crypto: add DHE support

In case of an invalid DH parameter file, it is sliently discarded. To
use auto DH parameter in a server and DHE key length check in a
client, we need to wait for the next release of OpenSSL-1.0.2.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: introduce ECDH
Fedor Indutny [Wed, 27 Aug 2014 14:01:01 +0000 (18:01 +0400)]
crypto: introduce ECDH

10 years agosrc: Add function name for .byteLength/.compare
Jackson Tian [Mon, 25 Aug 2014 12:55:11 +0000 (20:55 +0800)]
src: Add function name for .byteLength/.compare

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: allow padding in RSA methods
Fedor Indutny [Sat, 23 Aug 2014 13:38:32 +0000 (17:38 +0400)]
crypto: allow padding in RSA methods

Reviewed-By: Trevor Norris <trevnorris@gmail.com>
10 years agocrypto: fix memory leak in Connection::New
Fedor Indutny [Sat, 23 Aug 2014 19:22:23 +0000 (23:22 +0400)]
crypto: fix memory leak in Connection::New

Do not create `SSL` instance twice, `SSL_new` is called from `SSLBase`
constructor anyway.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agohttp: avoid create difference hidden class
Jackson Tian [Thu, 21 Aug 2014 16:05:42 +0000 (00:05 +0800)]
http: avoid create difference hidden class

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agonet,stream: add isPaused, don't read() when paused
Chris Dickinson [Tue, 19 Aug 2014 21:38:55 +0000 (14:38 -0700)]
net,stream: add isPaused, don't read() when paused

net Sockets were calling read(0) to start reading, without
checking to see if they were paused first. This would result
in paused Socket objects keeping the event loop alive.

Fixes #8200

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agodns: throw if hostname is not string or falsey
cjihrig [Fri, 15 Aug 2014 14:40:09 +0000 (10:40 -0400)]
dns: throw if hostname is not string or falsey

Fix assertion failure from poor argument parsing logic introduced in
6ea5d16. Add tests to make sure arguments are properly parsed.

Fixes: 6ea5d16 "dns: always set variable family in lookup()"
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agonode: add missing Isolate::Scope at startup
Ben Noordhuis [Tue, 19 Aug 2014 17:28:06 +0000 (10:28 -0700)]
node: add missing Isolate::Scope at startup

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agosrc: add missing Isolate arguments
Yazhong Liu [Wed, 13 Aug 2014 18:02:37 +0000 (02:02 +0800)]
src: add missing Isolate arguments

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agohttp: fix bailout for writeHead
Alex Kocharin [Thu, 14 Aug 2014 14:54:44 +0000 (18:54 +0400)]
http: fix bailout for writeHead

Reported-by: Jackson Tian <shyvo1987@gmail.com>
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agogyp: preserve v8dbg syms on freebsd too
Fedor Indutny [Sun, 17 Aug 2014 10:17:30 +0000 (14:17 +0400)]
gyp: preserve v8dbg syms on freebsd too

10 years agotest: fix dns test
Alexis Campailla [Tue, 12 Aug 2014 14:48:02 +0000 (16:48 +0200)]
test: fix dns test

Fix a few issues in test/internet/test-dns.js:
- 'hint' should be 'hints'
- reverse name lookup is not guaranteed to return 'localhost'
- V4MAPPED hint requires IPV6 address family

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agotests: don't assume IPv4 only in remote addr tests
Julien Gilli [Mon, 11 Aug 2014 20:29:00 +0000 (13:29 -0700)]
tests: don't assume IPv4 only in remote addr tests

Tests in test-net-remote-address-port.js assume that client and server
sockets always use IPv4. However, depending on the OS and the network
interfaces setup, this is not true. This change makes the test consider
that both IPv4 or IPv6 sockets are valid

Fixes #8096.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agotest: check ipv6 support before testing it
Fedor Indutny [Sat, 2 Aug 2014 08:42:42 +0000 (12:42 +0400)]
test: check ipv6 support before testing it

fix #7983
fix #8049

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agotests: do not hardcode service name in test-dns.
Julien Gilli [Wed, 6 Aug 2014 21:32:46 +0000 (14:32 -0700)]
tests: do not hardcode service name in test-dns.

Instead of hard-coding http service name in test-dns, retrieve it from
/etc/services. This is not ideal, but it's still better than hard-coding
it.

Fixes #8047.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agotests: fix invalid hints flags dns test.
Julien Gilli [Mon, 11 Aug 2014 22:15:21 +0000 (15:15 -0700)]
tests: fix invalid hints flags dns test.

1 is actually a valid flag on SmartOS. More generally, hints flags'
values are defined by the underlying native flags, and these can have
different values on different systems.

Using (ADDRCONFIG | V4MAPPED) + 1 ensure that the flag will be invalid,
since it will always be different from ADDRCONFIG, V4MAPPED, ADDRCONFIG
| V4MAPPED,  0 and any other combination of even flags.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agosrc: change kIsolateSlot to 3
Cheng Zhao [Sun, 10 Aug 2014 02:46:11 +0000 (10:46 +0800)]
src: change kIsolateSlot to 3

The slot 0 and 1 had already been taken by "gin" and "blink" in Chrome,
and the size of isolate's slots is 4 by default, so using 3 should hopefully
make node work independently when embedded into other application.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agosrc: require EventEmitter via NativeModule
Trevor Norris [Wed, 13 Aug 2014 04:50:21 +0000 (21:50 -0700)]
src: require EventEmitter via NativeModule

Fixes a recent change causing test-process-kill-pid.js to fail.

Fixes: 931cbc1 "lib: don't use emitter.listeners(type).length"
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agodgram: remove new keyword from errnoException
Jackson Tian [Wed, 13 Aug 2014 04:03:25 +0000 (12:03 +0800)]
dgram: remove new keyword from errnoException

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agodoc: typo fixes on stream, tls and http
Kyle Robinson Young [Fri, 8 Aug 2014 17:49:24 +0000 (10:49 -0700)]
doc: typo fixes on stream, tls and http

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agoquerystring: remove prepended ? from query field
Ezequiel Rabinovich [Wed, 13 Aug 2014 02:32:22 +0000 (23:32 -0300)]
querystring: remove prepended ? from query field

Fixes an issue that caused the first querystring to be parsed prepending
a "?" in the first variable name on relative urls with no #fragment

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agolib: don't use emitter.listeners(type).length
Jackson Tian [Mon, 11 Aug 2014 08:41:18 +0000 (16:41 +0800)]
lib: don't use emitter.listeners(type).length

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agonode: set names for prototype methods
Trevor Norris [Tue, 12 Aug 2014 00:10:43 +0000 (17:10 -0700)]
node: set names for prototype methods

Fix issue where output of a native prototype method would simply print
[Function]. It will now print [Function: name].

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agocrypto: add RSA encryption
seishun [Mon, 5 May 2014 14:35:28 +0000 (17:35 +0300)]
crypto: add RSA encryption

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agowindows: fix memory leak in WinapiErrnoException
Alexis Campailla [Tue, 5 Aug 2014 13:33:16 +0000 (15:33 +0200)]
windows: fix memory leak in WinapiErrnoException

Fix https://github.com/joyent/node/issues/2341

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agodns: always set variable family in lookup()
cjihrig [Fri, 8 Aug 2014 02:36:56 +0000 (22:36 -0400)]
dns: always set variable family in lookup()

Regression occurred that prevented the variable "family" from being set
properly when the lookup() function's "options" parameter was passed a
number instead of an object.

Also included a sanity check by setting the default value of "family" to
a value that will not pass verification.

Fixes: e643fe4 "dns: fix GetAddrInfo assert"
Reviewed-by: Alexis Campailla <alexis@janeasystems.com>
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agoopenssl: fix keypress requirement in apps on win32
Fedor Indutny [Wed, 11 Dec 2013 17:19:04 +0000 (21:19 +0400)]
openssl: fix keypress requirement in apps on win32

Original source:

http://openssl.6102.n7.nabble.com/PATCH-s-client-Fix-keypress-requirement-with-redirected-input-on-Windows-td46787.html

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agobuild: linking CoreFoundation framework for OSX
Thorsten Lorenz [Wed, 6 Aug 2014 18:00:31 +0000 (14:00 -0400)]
build: linking CoreFoundation framework for OSX

Linking CoreFoundation for OSX is needed for OSX debugging features to
function properly.

For instance Instruments cannot record Heap Allocations if the
CoreFoundation is not linked.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agotest: fix test-process-kill-pid on Windows
Alexis Campailla [Thu, 7 Aug 2014 14:45:53 +0000 (16:45 +0200)]
test: fix test-process-kill-pid on Windows

Disabling the part of the test that relies on dispatching SIGHUP,
because sending SIGHUP is not supported on Windows.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agodoc: document max `new Buffer(size)`
Jackson Tian [Wed, 6 Aug 2014 06:35:35 +0000 (14:35 +0800)]
doc: document max `new Buffer(size)`

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agoMerge remote-tracking branch 'upstream/v0.10' into v0.12
Timothy J Fontaine [Thu, 7 Aug 2014 23:33:35 +0000 (16:33 -0700)]
Merge remote-tracking branch 'upstream/v0.10' into v0.12

Conflicts:
ChangeLog
Makefile
deps/uv/ChangeLog
deps/uv/build.mk
deps/uv/src/unix/darwin.c
deps/uv/src/unix/getaddrinfo.c
deps/uv/src/version.c
deps/v8/src/checks.h
deps/v8/src/isolate.h
lib/cluster.js
lib/module.js
lib/timers.js
lib/tls.js
src/node_version.h

10 years agotests: fix child-process-fork-dgram on SmartOS.
Julien Gilli [Thu, 31 Jul 2014 23:16:42 +0000 (16:16 -0700)]
tests: fix child-process-fork-dgram on SmartOS.

Send messages until both the parent and the child process have received
at least one message. If at least one of them doesn't receive any
message, the test runner will make the test timeout.

Fixes #8046.

10 years agodoc: document arguments for 'error' event on a stream
Maciej Małecki [Thu, 7 Aug 2014 18:56:34 +0000 (20:56 +0200)]
doc: document arguments for 'error' event on a stream

Fixes #6361.

10 years agofs: fix fs.readFileSync fd leak when get RangeError
Jackson Tian [Wed, 6 Aug 2014 03:21:59 +0000 (11:21 +0800)]
fs: fix fs.readFileSync fd leak when get RangeError

10 years agosrc: handle UV_EAGAIN in TryWrite
Saúl Ibarra Corretgé [Sat, 5 Jul 2014 09:02:33 +0000 (11:02 +0200)]
src: handle UV_EAGAIN in TryWrite

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agoCluster: fix shared handles on Windows
Alexis Campailla [Thu, 24 Jul 2014 09:59:00 +0000 (11:59 +0200)]
Cluster: fix shared handles on Windows

This is the Node side of the fix for Node's cluster module on Windows.
https://github.com/joyent/node/issues/7691

The other required part is
https://github.com/joyent/libuv/pull/1384

Windows and Unix return certain socket errors (i.e. EADDRINUSE) at
different times: bind on Windows, and listen on Unix.
In an effort to hide this difference, libuv on Windows stores such
errors in the bind_error field of uv_tcp_t, to defer raising it at
listen time.
This worked fine except for the case in which a socket is shared in
a Node cluster and a bind error occurs.

A previous attempt to fix this (
https://github.com/joyent/libuv/commit/d1e6be1460f555a1f8a4063d7642696aa7238769
https://github.com/joyent/node/commit/3da36fe00e5d85414031ae812e473f16629d8645
) was flawed becaused in an attempt to relay the error at the JS level
it caused the master to start accepting connections.

With this new approach, libuv itself is relaying the bind errors,
providing for a uniform behavior of uv_tcp_listen.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agodeps: update libuv to v0.11.28
Fedor Indutny [Thu, 7 Aug 2014 11:03:17 +0000 (15:03 +0400)]
deps: update libuv to v0.11.28

10 years agodeps: update openssl to v1.0.1i
Fedor Indutny [Thu, 7 Aug 2014 09:36:56 +0000 (13:36 +0400)]
deps: update openssl to v1.0.1i

10 years agodoc: clarify factory methods for net.Socket
Kevin Simper [Sun, 3 Aug 2014 00:27:02 +0000 (02:27 +0200)]
doc: clarify factory methods for net.Socket

10 years agofs: fs.readFile should not throw uncaughtException
Jackson Tian [Tue, 5 Aug 2014 09:34:56 +0000 (17:34 +0800)]
fs: fs.readFile should not throw uncaughtException

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agodns: fix GetAddrInfo assert
Trevor Norris [Tue, 5 Aug 2014 01:12:54 +0000 (18:12 -0700)]
dns: fix GetAddrInfo assert

The method GetAddrInfo() is used by more than just dns.lookup(), and in
those cases a third argument isn't passed. This caused the following
check to abort:

  assert(args[3]->IsInt32());

Fixes: 4306786 "net: don't prefer IPv4 addresses during resolution"

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agonet: don't prefer IPv4 addresses during resolution
cjihrig [Thu, 22 May 2014 02:13:09 +0000 (22:13 -0400)]
net: don't prefer IPv4 addresses during resolution

Currently the address resolution family defaults to IPv4. Instead remove
the preference and instead resolve to a family suitable for the host.

Expose the getaddrinfo flags and allow them to be passed.

Add documentation about new flags.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agov8: Fix compliation with GCC 4.8
Timothy J Fontaine [Mon, 4 Aug 2014 20:43:50 +0000 (13:43 -0700)]
v8: Fix compliation with GCC 4.8

Supresses a very loud warning from GCC 4.8 about unused typedefs

Original url https://codereview.chromium.org/69413002

10 years agotest: fix test-net-remote-address-port
Julien Gilli [Fri, 1 Aug 2014 18:06:54 +0000 (11:06 -0700)]
test: fix test-net-remote-address-port

Do not use first socket in second socket's connect handler. Probably a
copy/paste mistake.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agopath: isAbsolute() should always return boolean
Herman Lee [Mon, 4 Aug 2014 14:18:54 +0000 (22:18 +0800)]
path: isAbsolute() should always return boolean

On Windows, path.isAbsolute() returns an empty string on failed cases.
This forces the return value to always be boolean.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agotimers: fix timers with non-integer delay hanging.
Julien Gilli [Mon, 4 Aug 2014 16:52:35 +0000 (09:52 -0700)]
timers: fix timers with non-integer delay hanging.

When backporting f8193ab into v0.10, a regression was introduced. Timers
with non-integer timeout could trigger a infinite recursion with 100%
cpu usage. This commit backports 93b0624 which fixes the regression.

After backporting f8193ab, instead of using Date.now(), timers would use
Timer.now() to determine if they had expired. However, Timer.now() is
based on loop->time, which is not updated when a timer's remaining time
is > 0 and < 1. Timers would thus never timeout if their remaining time
was at some point > 0 and < 1.

With this commit, Timer.now() updates loop->time itself, and timers
always timeout eventually.

Fixes #8065 and #8068.

10 years agoprocess: improve process binding
Jackson Tian [Fri, 1 Aug 2014 11:26:09 +0000 (19:26 +0800)]
process: improve process binding

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agotest: disable 0-dgram tests on darwin
Fedor Indutny [Sat, 2 Aug 2014 11:06:25 +0000 (15:06 +0400)]
test: disable 0-dgram tests on darwin

fix #8023

10 years agocluster: disconnect should not be synchronous
Sam Roberts [Thu, 31 Jul 2014 23:44:15 +0000 (16:44 -0700)]
cluster: disconnect should not be synchronous

Callbacks in node are usually asynchronous, and should never be
sometimes synchronous, and sometimes asynchronous.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agopath: fix slice OOB in trim
Lucio M. Tato [Sat, 2 Aug 2014 05:33:35 +0000 (02:33 -0300)]
path: fix slice OOB in trim

Internal function trim(arr). 2nd parameter of slice() should be slice's
end index (not included). Because of function normalize() (called before
trim()), "start" is always zero so the bug -for now- has no effect, but
its a bug waiting to happen.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agotest: assert cluster.disconnect is async
Sam Roberts [Thu, 31 Jul 2014 23:49:28 +0000 (16:49 -0700)]
test: assert cluster.disconnect is async

See joyent/node#8043, test passed on v0.11 already, but this makes the
test stronger.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agostream: fix Readable.wrap objectMode falsy values
James Halliday [Mon, 9 Jun 2014 01:58:53 +0000 (18:58 -0700)]
stream: fix Readable.wrap objectMode falsy values

A streams1 stream will have its falsy values such as 0, false, or ""
eaten by the upgrade to streams2, even when objectMode is enabled.

Include test for said cases.

Reviewed-by: isaacs <i@izs.me>
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
10 years agotls: throw an error, not string
Jackson Tian [Fri, 1 Aug 2014 06:08:52 +0000 (14:08 +0800)]
tls: throw an error, not string

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agocluster: support options in Worker constructor
cjihrig [Thu, 31 Jul 2014 02:20:52 +0000 (22:20 -0400)]
cluster: support options in Worker constructor

This commit moves some common Worker code into the constructor
via support for an options argument.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agodocs: fix non-string ignore note in path.resolve
Jakob Gillich [Wed, 25 Jun 2014 17:08:46 +0000 (19:08 +0200)]
docs: fix non-string ignore note in path.resolve

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agoAdd fast path for simple URL parsing
Gabriel Wicke [Tue, 1 Jul 2014 19:28:49 +0000 (12:28 -0700)]
Add fast path for simple URL parsing

This patch adds a fast path for parsing of simple path-only URLs, as commonly
found in HTTP requests received by a server.

Benchmark results [ms], before / after patch:
/foo/bar              0.008956   0.000418 (fast path used)
http://example.com/   0.011426   0.011437 (normal slow path, no change)

In a simple 'ab' benchmark of a single-threaded web server, this patch
increases the request rate from around 6400 to 7400 req/s.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agoNow working on 0.10.31
Timothy J Fontaine [Thu, 31 Jul 2014 18:12:08 +0000 (11:12 -0700)]
Now working on 0.10.31

10 years agoMerge branch 'v0.10.30-release' into v0.10
Timothy J Fontaine [Thu, 31 Jul 2014 18:11:53 +0000 (11:11 -0700)]
Merge branch 'v0.10.30-release' into v0.10

10 years ago2014.07.31, Version 0.10.30 (Stable) v0.10.30
Timothy J Fontaine [Thu, 31 Jul 2014 17:24:06 +0000 (10:24 -0700)]
2014.07.31, Version 0.10.30 (Stable)

* uv: Upgrade to v0.10.28

* npm: Upgrade to v1.4.21

* v8: Interrupts must not mask stack overflow.

* Revert "stream: start old-mode read in a next tick" (Fedor Indutny)

* buffer: fix sign overflow in `readUIn32BE` (Fedor Indutny)

* buffer: improve {read,write}{U}Int* methods (Nick Apperson)

* child_process: handle writeUtf8String error (Fedor Indutny)

* deps: backport 4ed5fde4f from v8 upstream (Fedor Indutny)

* deps: cherry-pick eca441b2 from OpenSSL (Fedor Indutny)

* lib: remove and restructure calls to isNaN() (cjihrig)

* module: eliminate double `getenv()` (Maciej Małecki)

* stream2: flush extant data on read of ended stream (Chris Dickinson)

* streams: remove unused require('assert') (Rod Vagg)

* timers: backport f8193ab (Julien Gilli)

* util.h: interface compatibility (Oguz Bastemur)

* zlib: do not crash on write after close (Fedor Indutny)

10 years agouv: Upgrade to v0.10.28
Timothy J Fontaine [Thu, 31 Jul 2014 16:31:01 +0000 (09:31 -0700)]
uv: Upgrade to v0.10.28

10 years agov8: Interrupts must not mask stack overflow.
Fedor Indutny [Wed, 30 Jul 2014 22:33:52 +0000 (15:33 -0700)]
v8: Interrupts must not mask stack overflow.

Backport of https://codereview.chromium.org/339883002

10 years agonpm: Upgrade to v1.4.21
Timothy J Fontaine [Thu, 31 Jul 2014 16:05:30 +0000 (09:05 -0700)]
npm: Upgrade to v1.4.21

10 years agomodule: eliminate double `getenv()`
Maciej Małecki [Tue, 25 Mar 2014 21:47:05 +0000 (04:47 +0700)]
module: eliminate double `getenv()`

`process.env` access results in a synchronous `getenv` call. Cache the
first result instead and save one syscall.

10 years agostreams: remove unused require('assert')
Rod Vagg [Sun, 30 Mar 2014 08:51:01 +0000 (19:51 +1100)]
streams: remove unused require('assert')

10 years agotimers: backport f8193ab
Julien Gilli [Wed, 23 Jul 2014 01:03:10 +0000 (18:03 -0700)]
timers: backport f8193ab

Original commit message:

 timers: use uv_now instead of Date.now

 This saves a few calls to gettimeofday which can be expensive, and
 potentially subject to clock drift. Instead use the loop time which
 uses hrtime internally.

In addition to the backport, this commit:
 - keeps _idleStart timers' property which is still set to
   Date.now() to avoid breaking existing code that uses it, even if
   its use is discouraged.
 - adds automated tests. These tests use a specific branch of
   libfaketime that hasn't been submitted upstream yet. libfaketime
   is git cloned if needed when running automated tests.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
10 years agoRevert "Cluster: fix shared handles on Windows"
Fedor Indutny [Thu, 31 Jul 2014 08:38:46 +0000 (12:38 +0400)]
Revert "Cluster: fix shared handles on Windows"

This reverts commit 4e68a28e20b348f3519b359a17fcb941b235202b.

10 years agoCluster: fix shared handles on Windows
Alexis Campailla [Thu, 24 Jul 2014 09:59:00 +0000 (11:59 +0200)]
Cluster: fix shared handles on Windows

This is the Node side of the fix for Node's cluster module on Windows.
https://github.com/joyent/node/issues/7691

The other required part is
https://github.com/joyent/libuv/pull/1384

Windows and Unix return certain socket errors (i.e. EADDRINUSE) at
different times: bind on Windows, and listen on Unix.
In an effort to hide this difference, libuv on Windows stores such
errors in the bind_error field of uv_tcp_t, to defer raising it at
listen time.
This worked fine except for the case in which a socket is shared in
a Node cluster and a bind error occurs.

A previous attempt to fix this (
https://github.com/joyent/libuv/commit/d1e6be1460f555a1f8a4063d7642696aa7238769
https://github.com/joyent/node/commit/3da36fe00e5d85414031ae812e473f16629d8645
) was flawed becaused in an attempt to relay the error at the JS level
it caused the master to start accepting connections.

With this new approach, libuv itself is relaying the bind errors,
providing for a uniform behavior of uv_tcp_listen.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agorepl: proper `setPrompt()` and `multiline` support
Fedor Indutny [Thu, 31 Jul 2014 08:30:46 +0000 (12:30 +0400)]
repl: proper `setPrompt()` and `multiline` support

fix #8031

10 years agoRevert "repl: fix overwrite for this._prompt"
Fedor Indutny [Thu, 31 Jul 2014 08:12:18 +0000 (12:12 +0400)]
Revert "repl: fix overwrite for this._prompt"

This reverts commit 7166b55015261de8ab69758320f3d9159b3eaadd.

10 years agocluster: test events emit on cluster.worker
Sam Roberts [Mon, 28 Jul 2014 23:53:10 +0000 (16:53 -0700)]
cluster: test events emit on cluster.worker

v0.10 and node docs specific that in a worker, the 'message' and 'error'
event emits on process, and on cluster.worker.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agogyp: do not rm unused openssl syms on osx/linux
Fedor Indutny [Wed, 30 Jul 2014 10:54:36 +0000 (14:54 +0400)]
gyp: do not rm unused openssl syms on osx/linux

fix #8026

Reviewed-By: Fedor Indutny <fedor@indutny.com>
10 years agotests: fix internet/test-dns.js
Julien Gilli [Wed, 30 Jul 2014 01:06:47 +0000 (18:06 -0700)]
tests: fix internet/test-dns.js

internet/test-dns.js assumes that ::1 always resolves to "localhost" on
all platforms. This is not what happens in reality. Some platforms
resolve it to "ip6-localhost" too. There doesn't seem to be any consensus
on what's the right thing to do. However, most sane platforms will use
either one of these two values.

Reviewed-by: Trevor Norris <trev.norris@gmail.com>