Commit Graph

19 Commits

Author SHA1 Message Date
Ryan Liptak
8a782f1815
doc: add uv_metrics_idle_time() version metadata
Refs: https://github.com/libuv/libuv/pull/2725
PR-URL: https://github.com/libuv/libuv/pull/2984
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
2020-09-03 11:08:10 -04:00
Jameson Nash
707dd7f17d
doc: fix most sphinx warnings
PR-URL: https://github.com/libuv/libuv/pull/2956
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2020-08-18 13:07:04 -04:00
Trevor Norris
e8effd4556 core: add API to measure event loop idle time
The API addition `uv_metrics_idle_time()` is a thread safe call that
allows the user to retrieve the amount of time the event loop has spent
in the kernel's event provider (i.e. poll). It was done this way to
allow retrieving this value without needing to interrupt the execution
of the event loop. This option can be enabled by passing
`UV_METRICS_IDLE_TIME` to `uv_loop_configure()`.

One important aspect of this change is, when enabled, to always first
call the event provider with a `timeout == 0`. This allows libuv to know
whether any events were waiting in the event queue when the event
provider was called. The importance of this is because libuv is tracking
the amount of "idle time", not "poll time". Thus the provider entry time
is not recorded when `timeout == 0` (the event provider never idles in
this case).

While this does add a small amount of overhead, when enabled, but the
overhead decreases when the event loop has a heavier load. This is
because poll events will be waiting when the event provider is called.
Thus never actually recording the provider entry time.

Checking if `uv_loop_t` is configured with `UV_METRICS_IDLE_TIME` always
happens in `uv__metrics_set_provider_entry_time()` and
`uv__metrics_update_idle_time()`. Making the conditional logic wrapping
each call simpler and allows for instrumentation to always hook into
those two function calls.

Rather than placing the fields directly on `uv__loop_internal_fields_t`
add the struct `uv__loop_metrics_t` as a location for future metrics API
additions.

Tests and additional documentation has been included.

PR-URL: https://github.com/libuv/libuv/pull/2725
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
Reviewed-By: Jameson Nash <vtjnash@gmail.com>
2020-08-04 10:31:42 -04:00
Ben Noordhuis
7262dd0490 doc: add note about uv_run() not being reentrant
PR-URL: https://github.com/libuv/libuv/pull/2208
Refs: https://github.com/libuv/help/issues/81
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2019-03-08 08:40:06 +01:00
Bartosz Sosnowski
a4b2e32228
doc: fix syntax error in loop documentation
PR-URL: https://github.com/libuv/libuv/pull/1748
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
2018-02-21 09:16:48 -05:00
Anna Henningsen
0d6525acae core: add getter/setter functions for easier ABI compat
Add getter/setter functions for the fields of public structs that
might be relevant to e.g. Node.js addons.

Through these methods, ABI compatibility for a subset of the ABI
is easier to achieve, since using them makes code independent
of the exact offsets of these fields.

The intended use case that prompted this are N-API addons for
Node.js, which look for more long-term ABI compatibility guarantees
than typical Node code. With these helper functions, using libuv
directly should no longer be an obstacle for such addons.

PR-URL: https://github.com/libuv/libuv/pull/1657
Refs: https://github.com/nodejs/node/issues/13512
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
2017-12-02 09:51:25 +01:00
Ed Schouten
7ef23d9e85 doc: clarify the description of uv_loop_alive()
This function not only returns true if there are active handles or
requests. First of all, it also takes into account whether handles are
referenced. Second, handles that are being closed also contribute to
whether a loop is alive.

Fixes: https://github.com/libuv/libuv/issues/1592
PR-URL: https://github.com/libuv/libuv/pull/1594
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
2017-11-15 13:59:34 +01:00
rayrase
7a93b12f1d
doc: mark uv_default_loop() as not thread safe
Fixes: https://github.com/libuv/libuv/issues/1461
PR-URL: https://github.com/libuv/libuv/pull/1590
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
2017-11-01 11:05:50 -04:00
cjihrig
6c2fd34e39 doc: mark uv_loop_fork() as experimental
uv_loop_fork() was recently added, but is known to contain
bugs. This commit marks the function as experimental so that
bugs can be addressed without blocking further libuv releases.

Refs: https://github.com/libuv/libuv/pull/846
Refs: https://github.com/libuv/libuv/pull/1269
Refs: https://github.com/libuv/libuv/issues/1264
PR-URL: https://github.com/libuv/libuv/pull/1356
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2017-05-25 11:41:27 -04:00
Ben Noordhuis
a76e7830ca doc: libuv does not touch uv_loop_t.data
Mea culpa, I forgot to update the documentation in commit ff0ae10
("unix: preserve loop->data across loop init/done") from July 2016.

PR-URL: https://github.com/libuv/libuv/pull/1299
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
2017-04-18 10:42:23 +02:00
Jason Madden
fd7ce57f2b unix: make loops and watchers usable after fork()
Added the uv_loop_fork() API that must be called in a child process to
continue using an existing loop. Internally this calls a uv__io_fork
function for each supported platform, similar to the way
uv__platform_loop_init works.

After this call, existing and new IO, async and signal watchers will
contiue working as before on all platforms, as will the
threadpool (although any threads it was using are of course gone).

On Linux and BSDs that use kqueue, existing and new fsevent watchers
will also continue to work as expected. On OS X, though, directory
fsevents will not be able to use the optimized CoreFoundation path if
they had already been used in the parent process, instead falling back
to the kqueue path used on other BSDs.

Existing fsevent watchers will not function on AIX or SunOS. This
could be relatively easily fixed by someone with AIX knowledge in the
future, but SunOS will require some additional work to keep track if
the watchers.

A new test file, test/test-fork.c, was added to contain fork-related
tests to verify functionality in the child process.

PR-URL: https://github.com/libuv/libuv/pull/846
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2017-03-21 12:23:44 +01:00
Ben Noordhuis
df96163702 doc: clarify uv_loop_close()
Make explicit that handles and requests should be closed before calling
uv_loop_close().

Fixes: https://github.com/libuv/libuv/issues/765
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2016-03-20 10:15:20 +01:00
Ben Noordhuis
7639dd510e doc: fix uv_run(UV_RUN_DEFAULT) description
Saying uv_run() always returns zero is incorrect in the presence of
calls to uv_stop().

PR-URL: https://github.com/libuv/libuv/pull/337
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-05-01 01:20:39 +02:00
Saúl Ibarra Corretgé
737cd1fb4f doc: clarify uv_default_loop
Indicate that it can (and should) also be closed, currently it's not
"special" in any way.

PR-URL: https://github.com/libuv/libuv/pull/147
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-01-21 09:12:25 +01:00
Saúl Ibarra Corretgé
3fef323e7c doc: indicate what version uv_loop_configure was added on
PR-URL: https://github.com/libuv/libuv/pull/60
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2014-12-11 17:29:14 +01:00
Ben Noordhuis
d3b1ccd6fb doc: document uv_loop_configure()
Move the comments from commit 9da5fd4 from the v0.10 branch into docs/.
2014-12-05 20:20:52 +01:00
Joey Geralnik
45c7ccce21 doc: fix spelling
Fix various typos and spelling mistakes in the documentation

PR-URL: https://github.com/libuv/libuv/pull/17
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2014-11-29 04:22:56 +01:00
Saúl Ibarra Corretgé
00df3ec75b doc: clarify uv_loop_t.data field lifetime
Fixes #1503
2014-09-30 09:14:56 +02:00
Saúl Ibarra Corretgé
32e2e75f60 doc: add API documentation 2014-09-11 09:38:35 +02:00