38 Commits

Author SHA1 Message Date
cheatfate
879c917242 Add cancellation handler for cancelAndWait() 2020-11-17 19:28:52 +02:00
Jacek Sieka
7fd1a0f635
rename newFuture proc's (#136)
...or the compiler randomly gets confused when
`-d:chronosFutureTracking` is enabled
2020-11-15 20:46:42 +02:00
Eugene Kabanov
b5915ecd29
Small fixes (#134)
* Fix cancellation behavior.
Fix some compilation warnings.

* Fix cancelAndWait() and add proper documentation.

* Add completed(Future) and done(Future) calls to check if Future[T] completed without an error.

* Add stepsAsync() and tests.

* Fix comments.

* Fix new primitive comment, to avoid usage for task switches.
2020-11-13 14:22:58 +02:00
Jacek Sieka
1ffd1cd3dc
release callback memory early (#130)
* release callback memory early

this fixes a memory leak where a deleted callback may keep references
alive until the future is finished.

In particular, when using helpers like `or` which try to remove
themselves from the callback list when a dependent future is completed,
create a reference chain between all futures in the expression - in the
pathological case where one of the futures is completes only rarely (for
example a timeout or a cancellation task), the buildup will be
significant.

* Removing unnecessary asserts, and place comments instead.
2020-09-15 10:55:43 +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
e6d50b7736 Revert "some metrics for monitoring futures (#85)"
This reverts commit e45ef32b5b7b1ed49ffcc52f39f42b7c30fab564.

Metrics implemented this way, with a lock inside the otherwise tight
event loop are not consistent with the chronos architecture that for
good or bad uses thread local variables to avoid them - the solution
does not have rough consensus behind it, and other avenues should be
explored for this generally useful functionality.
2020-08-16 01:48:25 +03:00
Zahary Karadjov
826d48c4aa Revert "more docs (#111)"
This reverts commit d0a17d551ff9dec8213b07ce067ecd931dce1021.

Moving CancelledError outside of the established Nim hierarchy is
not a solution that has rough consensus and has an unknown impact
on compatibility with otherwise correctly implemented cancellation
code (for example when `CatchableError` is caught, cleanup is done,
then the exception is reraised). Further, this breaks the established
convention in the Nim community that Exception should not be inherited
from, complicating compatibility with future Nim versions that may
enforce this more strongly.
2020-08-16 01:48:25 +03:00
Zahary Karadjov
34b81961d3 Revert "asyncCheck(): don't raise exception on cancellation (#121)"
This reverts commit baf33f04eaac481251ca306258ca5877e7a45a46.

This change hides exceptions that should be handled explicitly -
asyncCheck is a debugging tool that should only be used in
exception-free situations (indeed, to fail when the operation
unexpectedly raises). There is no rough consensus behind this
change.
2020-08-16 01:48:25 +03:00
Ștefan Talpalaru
baf33f04ea
asyncCheck(): don't raise exception on cancellation (#121) 2020-08-12 16:24:55 +02:00
Ștefan Talpalaru
d0a17d551f
more docs (#111)
* more docs

* make CancelledError and object of Exception
2020-08-06 20:52:50 +02:00
Ștefan Talpalaru
e45ef32b5b
some metrics for monitoring futures (#85) 2020-08-06 19:30:53 +02:00
Ștefan Talpalaru
f5634f499d
cancelAndWait(): add comments (#112)
The cancellation process has a very complicated control flow, split over
different files and hidden by macros. These comments should help shed a
light on this madness.
2020-07-30 02:47:11 +02:00
Eugene Kabanov
ce6e7d17b1
Make Future tracking and stack traces optional (#108)
* Make Future tracking optional via -d:chronosDutureTracking compilation flag.
* Stack traces is now optional, use -d:chronosStackTraces.
* Fix mistypes and add test for chronosStackTrace option.
2020-07-08 19:48:01 +03:00
Eugene Kabanov
5629b3c41f
[WIP] Zero-cost unattended Future[T] tracking mechanism. (#106)
* Zero-cost unattended Future[T] tracking mechanism with tests and tracking of test suite.
2020-07-06 09:33:13 +03: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
cheatfate
357baa52a0
Fix documentation for or. 2020-04-21 07:33:31 +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
Eugene Kabanov
cbd8e03823
Add allFinished() primitive. (#87)
* Add allCompleted() primitive.

* Rename it to allFinished().

* Fix allFinished Future's static name.
Use `mitems()` instead of `for`.
2020-04-01 12:10:56 +03:00
Zahary Karadjov
a9ed7e4f3f
FutureDefect is a type of Defect 2020-02-18 00:35:03 +02: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
a20c34603e
Revert back some exception changes. 2019-12-02 12:40:41 +02:00
Yuriy Glukhov
4d61345978
Use CatchableError as base instead of Exception 2019-11-22 18:59:02 +02:00
cheatfate
9ce7141087
Fix cancel() issue.
Fix asyncstream.nim not propagating cancellation.
Fix tlsstream.nim to proper propagate cancellation.
Fix tlsstream.nim stuck on close.
2019-10-17 14:44:14 +03:00
Eugene Kabanov
b41af14f86 Fix emscripten compilation errors. (#46)
* Move initAPI to newDispatcher() call.
2019-09-10 13:19:49 -04:00
Yuriy Glukhov
e3cb0d1a96 Await is a template now 2019-08-15 16:01:26 +02: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
13301005a3
Return back ValueError. 2019-06-25 10:50:56 +03:00
cheatfate
15b25140b4
Let complete/fail cancelled Future[T]/FutureVar[T] for free. 2019-06-25 10:18:47 +03:00
cheatfate
7d7753b7fd
Initial cancellation proposal. 2019-06-20 23:30:41 +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
66160a9630
Move fromProc to SrcLoc. 2019-04-08 16:46:22 +03:00
cheatfate
cd745a20ed
Add SourceLocation.
All the Future[T] operations using SourceLocation now.
2019-04-08 03:59:49 +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
cheatfate
4290e06e77
Fix #16. 2019-03-29 11:53:24 +02:00
cheatfate
ea3fb9629a
Fixed all() implementation. 2019-03-15 02:43:51 +02:00
Ștefan Talpalaru
685665ad21
assert() -> doAssert() 2019-03-14 04:03:32 +01: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