History log of /fuchsia/zircon/system/ulib/async-loop/loop.c
Revision Date Author Comments
# 39a67dc8 05-Aug-2018 Doug Evans <dje@google.com>

[ulib][async] Add support for exception ports

Tested: runtests
[which includes new tests for the new functionality]

Change-Id: Ib8eaf30eb2d9abf3f3ca72a0d77450ea52151149


# 40b25f35 17-Jul-2018 David Moore <davemoore@google.com>

[async] Use constant for async loop configuration.

This change enforces that async_create_loop() can not take a NULL config
and removes the default null_ptr config from async::Loop()

A couple of client uses in zircon had to be updated as well.

The change needs to wait for the depedent changes other layers have
cleared the CQ. Higher level trybots will be run first.

Test:CQ
Change-Id: Ia643da71acad0d843297b4dbbad5cdf6db2bb741


# c9fa43e3 12-Jul-2018 David Moore <davemoore@google.com>

[async] Change async_t -> async_dispatcher_t

This removes the compatibility wrappers once all the higher layers have
been migrated.

Bug:ZX-2337
Test:CQ
Change-Id: If8b59c157bbfadc63b426e679bce641ee7a7abd0


# 6a569be5 13-Jul-2018 David Moore <davemoore@google.com>

[async] Publish constant for async loop configuration.

First step towards disallowing NULL being passed to
async_loop_create() and async::Loop()

This adds a new constant and provides an alternative to the
existing one to be consistent with naming.

It also updates all client calls within zircon.

Test:CQ
Change-Id: I93c53e9b575248293dd5bfeea6269281fc329aa6


# e64227cd 14-Jul-2018 Roland McGrath <mcgrathr@google.com>

[build][ulib][async-loop] Define _ALL_SOURCE directly in source using extensions

The way to make the source code the most resilient to what options
it's compiled with is to define feature-test macros at the top of the
source file when a particular source file uses nonstandard extensions
declared in standard headers.

Change the build rules so that library modules exported as source get
compiled in a default feature-test environment (without _ALL_SOURCE).
This ensures the Zircon build will catch any exported source that is
not standalone with respect to its feature-test expectations.

Bug: DX-315 #done
Test: CQ
Change-Id: Ife671f2bebaa2eccbe9abbe2cd3d7ec842b9488e


# ab699321 02-Jul-2018 David Moore <davemoore@google.com>

[sysapi] Update API to match C rubric.

Test: CQ

Change-Id: I930f939337634366e31aefdf55724198851dbd90


# fabb8fe6 04-Jul-2018 David Moore <davemoore@google.com>

[async] Change async_t -> async_dispatcher_t

Change name of dispatcher type from async_t to async_dispatcher_t
Keep typedef of async_t for compatibility

Change async_{get,set}_default() to async_{get,set}_default_dispatcher()
Again, keep compatible apis until other layers have been modified to use
new api.

Bug:ZX-2337
Test:CQ
Change-Id: If0b5d061fd114d60e23078dbb5f2a6ed9ed6f6cc


# 47cff597 26-Jun-2018 George Kulakowski <kulakowski@google.com>

[clock] zx_clock_get(ZX_CLOCK_MONOTONIC) -> zx_clock_get_monotonic()

Test: no functional change

Change-Id: Iaa513c521d96b178458acc707be3646067971701


# 997ec13a 24-May-2018 Adam Barth <abarth@google.com>

[syscalls] Remove count arguments from port_queue and port_wait

This argument is not used and always must be one. I tried implementing
some reasonable behavior for this parameter on port_queue, but it wasn't
clear what to do when we encounter an error during the queue operation
because there isn't an out parameter for how many we succeeded in
queuing.

Rather than having a half-baked feature, we should just remove the
parameter and add another function that does vectorized versions of
these operations if we need that in the future.

Change-Id: Ifffcd6d705442cc830912a67c8117ffe5ec8295d


# e8968ef8 17-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Add a version number to the async ops structure.

Bug: ZX-1773 #done
Change-Id: I3f1c1e31c01d80f2d7445c0fdcfe6657a79901d7


# cb9b1324 16-Apr-2018 Garret Kelly <gdk@google.com>

[zx] Call zx_port_{wait,queue} with correct count

In the near future zx_port_{wait,queue} will not accept a count of zero.
Change all zircon callers to call these functions with a count of one.

ZX-1291 #comment

Change-Id: I5697208c7931a5e117f469c901c78f65615eeee0


# 45c8863a 12-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Strengthen invariants for list of pending waits.

Ensure that we don't try to cancel waits which are not in the list
because they are being dispatched concurrently or because the
loop is shutting down (because we don't drain the port packets).

Also be more strict about the set of errors returned. In particular,
never return ZX_ERR_BAD_HANDLE since it indicated something is
deeply wrong with the state of the loop or the wait objects and tends
to balloon into hard to find bugs much further downstream (such
as during loop shutdown).

Change-Id: I67567a1e14bfbeaca0ff0bee9cb46faacdb53ba6


# 89d2b24d 10-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Tidy up the libasync API futher.

Deleted WaitWithTimeout since it is no longer used.
Removed flags and reserved storage.
Removed return code from wait handler.
Removed *_or_report_error variants after further consideration.
Deleted the non-RAII variants of the C++ wrappers; these wrappers
might as well be safe to use. Clients desiring minimum overhead
can use the C API instead if they prefer.
Made the C++ wrappers more systematic; each one has a fbl::Function
and a Method based variant.
Added a C++ wrapper for Tasks which takes a no-arg closure.
Improved consistency across all async operations, including docs.
Ported all programs to the new API as required.
Beefed up the tests.

Change-Id: I97beca26cec6d94fa7efd282c8d2620cdbcb84e5


# ec182715 10-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Fix timer restart logic.

We should restart the timer after removing the task from the list.
This bug was essentially benign as the timer would simply have
fired prematurely and then been restarted all over again.

Change-Id: I8551b8782397fd70ed326f4069524cb25448689f


# 2485acfa 06-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Tidy up the libasync API for tasks and receivers.

Remove flags fields and reserved storage.
Make the C++ wrappers friendlier.
Move the ops invokers into libasync.a itself in preparation for
adding versioning to the ops structure.
Add *_or_report_error() function variants which make it easier
to systematically handle errors while posting tasks or
enqueuing packets.
Removed the return value from task handlers to reduce confusion
around the lifetime of the task structure and remove an
unusual error handling scenario in case of a failure to
schedule a task to be repeated.
Pass the Task* to the handler for consistency with the C API.
Added some missing static library dependencies.
Reduce use of libfbl (except fbl/function.h).
Remove uses of private inheritance.

Change-Id: I7ccea5b68d6bccb2c7a236d112428c9b17fe8cdd


# c82841ad 04-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Make async_loop_t and async_t be different types.

It was confusing that async_loop_quit() took an async_t* as argument
but was only valid when called with a dispatcher created using
async_loop_create(). So use distinct types to represent the message
loop and dispatcher interfaces.

Change-Id: If17b08ed8c17203afd2383d5b2962f60ef5e82b3


# 8d6914b9 04-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Clarify the purpose of kAsyncLoopConfigMakeDefault.

This change includes compatibility shims to be removed once the
upper layers have been migrated.

Change-Id: I99a492078d30092677968c659ad3ed38ff9d5b6c


# 76df15cb 04-Apr-2018 Jeff Brown <jeffbrown@google.com>

[async] Move async-loop implementation to its own directory.

People keep getting confused by the relationship between async-loop
and the rest of the library. So let's fix it.

This change includes compatibility includes for loop.h to be removed
after upper layers are fixed to use the new paths.

Change-Id: I95c57be533fbd91468275bb2470890a4f10101eb