Async exchange abort
|Reported by:||Jiri Svoboda||Owned by:|
|Blocker for:||Depends on:|
|See also:||#181, #390|
Async exchange is the unit of work for a server, It is used to request the server to perform some operation(s) and then wait for response(s) which indicates the result. Often an operation can take long or indefinite time to complete so. Therefore a way is needed to tell the server to abort the operation.
The user calls async_exchange_abort() or similar, the async framework communicates this to the server via a private IPC method. The server-side async framework internally marks the specified exchange as aborted. The server user code can ask whether the current exhange is aborted. Abort-aware synchronization primitives (async_condvar_wait()) are provided that return with a special error code when the exchange is aborted.
While this abort operation could be implemented at the protocol level, it is very common and it could simplify the implementation of servers considerably if we supported this in async framework directly.
This feature would benefit cases such as user administratively aborting a task, detaching a device, etc.
Necessary changes and gotchas:
- need to reserve method numbers for purposes of async framework
- need an alternate or extended version of async_condvar_wait() and possibly other functions
- servers need to be made aware in order to make use of the feature (mark exchange boundaries, handle abort conditions)