28 Commits

Author SHA1 Message Date
Jacek Sieka
4abd7a5645
exception tracking (#166)
* exception tracking

This PR adds minimal exception tracking to chronos, moving the goalpost
one step further.

In particular, it becomes invalid to raise exceptions from `callSoon`
callbacks: this is critical for writing correct error handling because
there's no reasonable way that a user of chronos can possibly _reason_
about exceptions coming out of there: the event loop will be in an
indeterminite state when the loop is executing an _random_ callback.

As expected, there are several issues in the error handling of chronos:
in particular, it will end up in an inconsistent internal state whenever
the selector loop operations fail, because the internal state update
functions are not written in an exception-safe way. This PR turns this
into a Defect, which probably is not the optimal way of handling things
- expect more work to be done here.

Some API have no way of reporting back errors to callers - for example,
when something fails in the accept loop, there's not much it can do, and
no way to report it back to the user of the API - this has been fixed
with the new accept flow - the old one should be deprecated.

Finally, there is information loss in the API: in composite operations
like `poll` and `waitFor` there's no way to differentiate internal
errors from user-level errors originating from callbacks.

* store `CatchableError` in future
* annotate proc's with correct raises information
* `selectors2` to avoid non-CatchableError IOSelectorsException
* `$` should never raise
* remove unnecessary gcsafe annotations
* fix exceptions leaking out of timer waits
* fix some imports
* functions must signal raising the union of all exceptions across all
platforms to enable cross-platform code
* switch to unittest2
* add `selectors2` which supercedes the std library version and fixes
several exception handling issues in there

* fixes

* docs, platform-independent eh specifiers for some functions

* add feature flag for strict exception mode

also bump version to 3.0.0 - _most_ existing code should be compatible
with this version of exception handling but some things might need
fixing - callbacks, existing raises specifications etc.

* fix AsyncCheck for non-void T
2021-03-24 10:08:33 +01:00
Eugene Kabanov
bca5559c6a
Race() call (#142)
* Add `race` procedure call which extends `one` with FutureBase.

* Fix race() and add test procedures.
2020-11-27 00:50:55 +02:00
cheatfate
493cb1dbfd Fix behavior of wait() and withTimeout() calls to cancel and wait for result of cancelled Future[T].
Add tests.
2020-11-17 19:28:52 +02:00
Eugene Kabanov
126ea4bc56
Fix newFuture[T] location source for generated async procedures. (#125)
Add tests to for locations.
2020-09-03 14:37:53 +03:00
Eugene Kabanov
a5442edfc0
Add asyncSpawn() procedure and tests. (#123)
Deprecated asyncDiscard() procedure.
Bump version to 2.5.2.
2020-09-01 21:41:18 +03:00
Zahary Karadjov
03f4a26829 Revert "yieldAsync() (#120)"
This reverts commit 284d6778155fa956a773613b56b32b2522365849.

There is no rough consensus for how this should be implemented and
whether it's needed indeed - a use case that cannot be solved with
a queue or a lock/event should be identified before pursuing this
functionality.
2020-08-16 01:48:25 +03:00
Ștefan Talpalaru
284d677815
yieldAsync() (#120) 2020-08-10 15:31:21 +02:00
Eugene Kabanov
16ed169f25
Fix cancellation race when low level futures are already completed, while cancellation process is pending. (#107)
Added test.
2020-07-03 15:03:59 +03:00
Eugene Kabanov
2ecc5500c2
Undeprecate or operation. (#93)
* Undeprecate `or` operation.
Fix `or` for already finished futures.
Add tests.

* Bump version to 2.3.9.
2020-04-21 07:07:49 +03:00
Eugene Kabanov
4e2810cfe0
Fix issue with allFinished(), allFutures(), one() behavior when Futures passed are already finished. (#89)
Added test.
2020-04-06 13:56:24 +03:00
cheatfate
74700fdcab Fix bug cancellation handlers not called in wait() and withTimeout().
Fix double completion bug because of callback race.
Fix deprecation warnings.
Rename some internal procedures.
Bump version to 2.3.5.
2020-01-27 22:32:08 +02:00
cheatfate
fb00b20cfa
Fix all compilation warnings for 1.0.2.
Fix all related problems.
2019-10-29 23:19:41 +02:00
cheatfate
29d9274e03
Fix some compilation warnings. 2019-10-24 16:01:57 +03:00
cheatfate
fcfb87d2a0
Deprecate oneIndex(), oneValue(), all(), or(), and().
Add allFutures() and one().
Fix deprecation in chunkedstream.
Add tests.
2019-07-04 15:04:59 +03:00
cheatfate
992cc57377
Fix timeout value. 2019-06-26 15:50:40 +03:00
cheatfate
059433ccad
Add cancellation tests. 2019-06-26 15:36:01 +03:00
cheatfate
c27c564d47
Add oneIndex(), oneValue() which are varargs or operation.
Fix some deprecation warnings for Nim devel.
Add tests for oneIndex(), oneValue().
2019-06-04 19:51:35 +03:00
cheatfate
80ee289847
Fix rarely appearing Windows bug with close(transport).
Add tests for it.
Add fromProc for all Future[T] in transports.
Add testall to improve tests speed.
Bump version to 2.2.4.
2019-03-31 00:31:10 +02:00
Eugene Kabanov
67e214c5df Introduce monotonic timer functions. (#24)
* Introduce monotonic timer functions.
Old fast timers are available through compiler switch.
Add tests for both timers.
* Bump version to 2.2.2.
2019-03-24 10:57:36 -06:00
cheatfate
c05c012d9a
Restore lost tests for all. 2019-03-15 02:54:16 +02:00
Mamy Ratsimbazafy
9f15c6b752
Rebrand Asyncdispatch2 to Chronos [WIP] (#20)
* Update file headers, copyright date

* Rename files and hopefully fix nimble

* Forgot to change path in tests

* Update readme
2019-02-06 15:49:11 +01:00
cheatfate
40bfc25ea3 Increase timeout for VM testing. 2018-07-24 17:02:32 +03:00
cheatfate
f4803c61ae Improve wait() test. 2018-07-24 16:55:51 +03:00
cheatfate
32bbbb051c Add asynchronous specific exception AsyncError.
Add AsyncTimeoutError.
Add wait[T]() procedure and tests.
Bump version to 2.0.2.
2018-07-20 11:58:01 +03:00
cheatfate
6faceb3b8c Added removeCallback() test. 2018-05-30 07:35:27 +03:00
cheatfate
e3171a132a Add more documentation.
Add (#7197) test.
2018-05-27 08:49:47 +03:00
cheatfate
9e63caf694 More tests added. 2018-05-25 23:00:32 +03:00
cheatfate
608924d9f4 Added Future[T] tests. 2018-05-23 02:28:16 +03:00