Commit Graph

39 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
cheatfate 46c0bf3c5a
Fix define to skip flaky test on MacOS. 2020-11-27 03:50:38 +02:00
Eugene Kabanov ac9b3e304f
Fix deadlock for pending write() calls on transport close. (#139)
Add tests for read() and write() deadlocks.
2020-11-18 11:30:33 +02:00
cheatfate 3968f09ae1
Skip flaky test on MacOS. 2020-07-17 09:38:58 +03:00
Eugene Kabanov 02b8da986b
Add accept() call (#103)
* Add accept() call and tests.
* Fix rare fd leaks on Windows.
* Fix compilation warnings.
* Add fd leak test.
* Bump version to 2.4.0.
2020-06-24 11:21:52 +03:00
Jacek Sieka d8f8e3d9fc
readMsg branch by @arnetheduck with some changes. (#83)
Co-authored-by: Eugene Kabanov <ka@hardcore.kiev.ua>
2020-03-05 10:59:10 +01:00
cheatfate 80351cb928
Fix #73. 2020-02-12 22:54:05 +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 3b8874a9e8
Fix issue with Windows connect(0.0.0.0). 2019-10-09 15:12:19 +03:00
cheatfate ec7f2a14a8
Fix compilation warnings in osnet.nim
Fix non stable stream tests.
2019-07-12 10:40:18 +03:00
cheatfate 9c15a09904
Bump version to 2.2.7.
Attempt to fix stability of MacOS test.
2019-07-04 15:30:07 +03:00
cheatfate 317ce3c797
Ignore ECONNRESET and EPIPE errors on sending.
Add test for ECONNRESET error.
2019-05-28 09:29:00 +03:00
cheatfate 6a1f7785a0
Custom tracking mechanism.
1. Add simple tracking of Datagram and Stream transports.
2. Fix leaks in tests.
3. Add leaks tests to Datagram and Stream transport tests.
2019-04-04 12:34:23 +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
Ștefan Talpalaru 685665ad21
assert() -> doAssert() 2019-03-14 04:03:32 +01:00
cheatfate eac1b1a965 Decrease number of tests. 2019-02-06 18:29:58 +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
andri lim b6ffaf1dc7 fixes StreamTransport readOnce bug 2018-11-20 13:58:25 +07:00
cheatfate de7fb4ad49 One more attempt to fix freeze. 2018-10-27 21:09:23 +03:00
cheatfate 774269f2f0 Fix `sendfile` behavior on BSD/MacOSX. 2018-10-25 22:59:40 +03:00
cheatfate 0ea8e65b2c Fix connection refused check. 2018-10-25 13:52:56 +03:00
cheatfate a4c27806ea Add AF_UNIX sockets support.
Add Windows emulation of AF_UNIX sockets via Named Pipes.
Add tests for AF_UNIX sockets.
TransportAddress object change.
2018-10-25 13:19:19 +03:00
cheatfate da1fb97c7a Added `code` for TransportOsError exception.
Fixed bug with connect on Windows.
Added test for `Connection Refused`.
Bump version to 2.1.4.
2018-10-03 03:44:39 +03:00
cheatfate 530905f276 Fix #8 and related issues, added more tests for it.
Fix Unix connection failed bug.
2018-08-24 15:20:08 +03:00
cheatfate 293f993bed Fix 32bit windows tests. 2018-07-31 13:11:47 +03:00
cheatfate 38f30e0f18 Added createStreamServer() for GC userdata types. 2018-06-07 00:29:37 +03:00
cheatfate b8e8d96f3b Fix datagram: for send/sendTo (string, seq[T]) versions.
Fix stream: for write (string, seq[T]) versions
More tests for both datagram/stream.
2018-06-05 23:21:07 +03:00
cheatfate 3cb521c920 Add datagram transport utility templates send(string) send(seq[byte]).
Fix bugs in stream.nim
Add more tests for stream.nim
2018-06-05 08:51:59 +03:00
cheatfate 2b8eeef7aa Added templates write(string), write(seq[byte])
Added consume()
Added tests for write(string), write(seq[byte]), consume().
2018-06-04 19:42:54 +03:00
cheatfate 960b675d62 Changed TransportAddress API.
Introduced resolveTAddress().
Added TransportAddress tests.
2018-06-02 17:25:26 +03:00
cheatfate 027e7c02a9 Added DatagramServer.
Changed StreamServer API a bit.
Added test for DatagramServer.
2018-05-31 11:03:58 +03:00
cheatfate a8212e8910 Added timers test. 2018-05-23 01:29:07 +03:00
cheatfate d28e4d0c49 Enable all tests.
Adding more iterations for UDP stream test.
Fixed bugs in TCP stream.
2018-05-22 18:21:58 +03:00
Your Name e935c7e518 Fix test file path location. 2018-05-22 01:12:30 +03:00
Your Name 23a81b6492 Refactoring, more tests. 2018-05-22 00:52:57 +03:00
Your Name 570467a306 Attempts to fix #01 2018-05-17 11:45:18 +03:00
cheatfate 868ae64ae0 Fix compilation warning at asyncfutures2.nim
Add spawn procedure
Add usage of spawn procedure in datagram.nim
Some fixes at stream.nim
Increase number of clients in testdatagram.nim
2018-05-16 18:28:23 +03:00
cheatfate 4d144753ee Initial commit 2018-05-16 11:22:34 +03:00