* uv: Upgrade to v0.11.22 (Timothy J Fontaine) * buffer: allow toString to accept Infinity for end (Brian White) * child_process: add spawnSync/execSync (Bert Belder, Timothy J Fontaine) * cluster: handle bind errors on Windows (Alexis Campailla) * contextify: handle infinite recursion errors (Fedor Indutny) * crypto: allow custom generator for DiffieHellman (Brian White) * crypto: allow setting add'l authenticated data (Brian White) * crypto: fix CipherFinal return value check (Brian White) * crypto: make NewSessionDoneCb public (Fedor Indutny) * dgram: pass the bytes sent to the send callback (Timothy J Fontaine) * dns: validate arguments in resolver (Kenan Sulayman) * dns: verify argument is valid function in resolve (Kenan Sulayman) * http: avoid duplicate keys in writeHead (David Björklund) * net: add localPort to connect options (Timothy J Fontaine) * node: do not print SyntaxError hints to stderr (Fedor Indutny) * node: invoke `beforeExit` again if loop was active (Fedor Indutny) * node: make AsyncListenerInst field more explicit (Trevor Norris) * os: networkInterfaces include scopeid for ipv6 (Xidorn Quan) * process: allow changing `exitCode` in `on('exit')` (Fedor Indutny) * readline: fix `line` event, if input emit 'end' (Yazhong Liu) * src: add tracing.v8.on('gc') statistics hooks (Ben Noordhuis) * src: add v8.getHeapStatistics() function (Ben Noordhuis) * src: emit 'beforeExit' event on process object (Ben Noordhuis) * src: move AsyncListener from process to tracing (Trevor Norris) * tls: fix crash in SNICallback (Fedor Indutny) * tls: introduce asynchronous `newSession` (Fedor Indutny) * util: show meaningful values for boxed primitives (Nathan Rajlich) * vm: don't copy Proxy object from parent context (Ben Noordhuis) * windows: make stdout/sterr pipes blocking (Alexis Campailla) * zlib: add sync versions for convenience methods (Nikolai Vavilov)
Fix the following valgrind warning: Conditional jump or move depends on uninitialised value(s) at 0x7D64E7: v8::internal::GlobalHandles::IterateAllRootsWithClassIds(v8::internal::ObjectVisitor*) (global-handles.cc:613) by 0x94DCDC: v8::internal::NativeObjectsExplorer::FillRetainedObjects() (profile-generator.cc:2849) # etc. This was fixed upstream in r12903 and released in 3.15.2 but that commit was never back-ported to the 3.14 branch that node.js v0.10 uses. The code itself works okay; this commit simply shuffles the clauses in an `if` statement to check that the node is in use before checking its class id (which is uninitialized if the node is not in use.)
When sending a socket to a child process via IPC pipe, `child_process.js` picks a raw UV handle from `_handle` property, sends it, and assigns `null` to the property. Sending the same socket twice was resulting in a runtime error, since we weren't handling the empty `_handle` case. In case of `null` `_handle` we should send just a plain text message as passed it was passed to `.send()` and ignore the handle, letting users handle such cases themselves instead of throwing the error at runtime. fix #5469
It's currently not really possible to compile native add-ons with -fvisibility=hidden because that also hides the struct containing the module definition. The NODE_MODULE() and NODE_MODULE_DECL() macros are structured in a way that makes it impossible to add a visibility attribute manually so there is no escape hatch there. That's why this commit adds an explicit visibility attribute to the module definition. It doesn't help with node.js releases that are already out there but at least it improves the situation going forward.
If two timers run on the same tick, and the first timer uses a domain, and then catches an exception and disposes of the domain, then the second timer never runs. (And even if the first timer does not dispose of the domain, the second timer could run under the wrong domain.) This happens because timer.js uses "process.nextTick()" to schedule continued processing of the timers for that tick. However, there was an exception inside a domain, then "process.nextTick()" runs under the domain of the first timer function, and will do nothing if the domain has been disposed. To avoid this, we temporarily save the value of "process.domain" before calling nextTick so that it does not run inside any domain.
Previously if you cached process.nextTick and then require('domain') subsequent nextTick() calls would not be caught because enqueued functions were taking the wrong path. This keeps nextTick to a single function reference and changes the implementation details after domain has been required.
When `setImmediate(cb)` is called in `beforeExit` event handler the consequent `uv_run(..., UV_RUN_NOWAIT)` may return `0`, even if there was some active handles at start. Fixes simple/test-beforeexit-event.js.
Unlike the 'exit' event, this event allows the user to schedule more work and thereby postpone the exit. That also means that the 'beforeExit' event may be emitted many times, see the attached test case for an example. Refs #6305.
Between `ClientRequest` and `Agent`. The circular require was doing weird things at load time, like making the `globalAgent` property be `undefined` from within the context of the "_http_client" module. Removing the circular dependency completely fixes this. This commit effectively removes the undocumented `Agent#request()` and `Agent#get()` functions.
Don't invoke the `agent.requst()` or `agent.get()` functions directly. Instead, use the public API and pass the agent instance in as the `agent` option.
For the `request()` and `get()` functions. I could never really understand why these two functions go through agent first... Especially since the user could be passing `agent: false` or a different Agent instance completely, in which `globalAgent` will be completely bypassed. Moved the relevant logic from `Agent#request()` into the `ClientRequest` constructor. Incidentally, this commit fixes #7012 (which was the original intent of this commit).