2
0
mirror of https://github.com/boostorg/fiber.git synced 2026-02-20 14:42:21 +00:00
Commit Graph

58 Commits

Author SHA1 Message Date
Oliver Kowalke
e9a0d4d669 remove noexcept from dtor of context+scheduler 2015-12-05 15:14:31 +01:00
Oliver Kowalke
c8071c5373 fix data_t for MSVC 14 (initializer-list issue) 2015-12-04 18:26:49 +01:00
Oliver Kowalke
3319841788 use spinlock_lock+context instead of function<> 2015-12-03 17:57:00 +01:00
Oliver Kowalke
abbc507d13 re-factor futures 2015-12-02 21:57:27 +01:00
Oliver Kowalke
0519929d26 C++14 - context 2015-12-02 17:18:31 +01:00
Oliver Kowalke
726d4d51b9 ++14 polishing 2015-12-01 21:07:11 +01:00
Oliver Kowalke
7bd1863115 apply noexcept 2015-11-25 19:32:32 +01:00
Oliver Kowalke
a344247f07 remove forced_unwind and related functions
- unwinding the stack via exception is not always necessary
- usually a fiber returns from its fiber-fn (stack is already unwound)
- if a fiber has to terminate, interrupt that fiber
2015-11-25 19:30:25 +01:00
Oliver Kowalke
6d3f00902f use this in capture-list 2015-11-22 14:42:28 +01:00
Oliver Kowalke
ca655a84d9 execute func + set active fiber inside context::resume() 2015-11-22 14:28:09 +01:00
Oliver Kowalke
5277c51bbb re-add previously removed context::attach() 2015-10-21 15:40:50 +02:00
Oliver Kowalke
f743b63bc0 replace context::attach()/detach() by context::migrate() 2015-10-21 15:25:12 +02:00
Oliver Kowalke
4710e12fe1 rename scheduler::re_schedule() -> scheduler::suspend() 2015-10-18 20:03:38 +02:00
Oliver Kowalke
abe114ad81 segmented-stacks=on -> only segmented_stack is available 2015-10-18 19:21:45 +02:00
Oliver Kowalke
559e498982 context::terminate() as replacement for set_terminated_()/release() 2015-10-17 15:10:28 +02:00
Oliver Kowalke
bafd65bcf3 remove yield-queue + pass functor to resume-op 2015-10-16 21:48:57 +02:00
Oliver Kowalke
79e5776805 qualify functions which use intrusive-list with const and noexcept 2015-10-14 16:05:20 +02:00
Oliver Kowalke
51c1a96c4d introduce attach/detach of context 2015-10-14 13:37:44 +02:00
Oliver Kowalke
c738fefec7 remove spinlock protecting context lists 2015-10-12 21:59:47 +02:00
Oliver Kowalke
dbfd80fb2d use yield-queue because work-sharing
- yield-queue prevents resumtion of a fiber which is passed to
  awakened() but has not yet suspended
2015-10-10 21:52:03 +02:00
Oliver Kowalke
4a37a15d19 move make_dispatcher_context() to cpp file 2015-10-03 09:14:33 +02:00
Oliver Kowalke
8662b5e253 align main context and scheduler to 64byte boundaries 2015-10-02 19:52:43 +02:00
Oliver Kowalke
4cd1a910d9 use schwarz counter idiom for static variable initialization 2015-10-02 17:28:59 +02:00
Oliver Kowalke
20196fcd69 set active context to nullptr in ~scheduler() 2015-09-30 19:58:04 +02:00
Oliver Kowalke
4c791a3790 support for fiber properties + custom scheduler 2015-09-29 17:54:29 +02:00
Oliver Kowalke
a847baa932 link/unlink of context protected by spinlock 2015-09-28 19:58:22 +02:00
Oliver Kowalke
eb7c4249d5 rename managed_is_linked() -> worker_is_linked() 2015-09-28 19:35:59 +02:00
Oliver Kowalke
73b03c1d67 use std::allocator_arg for execution_context ctor 2015-09-27 16:09:11 +02:00
Oliver Kowalke
fc404c58eb unwind at shutdown
- scheduler holds a list of managed worker-fibers
- ~scheduler() requests stack unwinding for fibers not yet terminated
2015-09-24 17:35:40 +02:00
Oliver Kowalke
1b274d9b73 support for fiber-specific storage 2015-09-22 19:10:09 +02:00
Oliver Kowalke
128b534058 fix context 2015-09-21 20:34:41 +02:00
Oliver Kowalke
38457260bc remoce noexcept specifier from context::join() 2015-09-21 20:34:09 +02:00
Oliver Kowalke
1ad58fbba1 add interruption 2015-09-21 20:18:53 +02:00
Oliver Kowalke
eec3d34fb0 remote ready-queue uses differrent hook than local ready-queue 2015-09-20 22:06:59 +02:00
Oliver Kowalke
b3660a3432 reorder member variables of context
- member hooks must be destroyed before execution_context
- otherwise an segementation fault is caused
- destruction of execution_context deallocates stack on which
  the member variables of context are allocated
2015-09-20 11:25:32 +02:00
Oliver Kowalke
6b01f060b7 class timed_mutex added 2015-09-19 18:03:41 +02:00
Oliver Kowalke
3f5e076f3a class mutex added 2015-09-19 17:01:20 +02:00
Oliver Kowalke
943e21e69b add support for signaling a context as ready 2015-09-19 16:19:02 +02:00
Oliver Kowalke
59946d4426 add noexcept keyword to scheduler::wait_until() and context::wait_until() 2015-09-19 16:18:36 +02:00
Oliver Kowalke
a89f4a5979 protect context' wait-queue for concurrent access
- protect wait-queue as well termiantion flag
2015-09-19 09:32:14 +02:00
Oliver Kowalke
6da902ff09 support sleep_for()/sleep_until() 2015-09-19 08:59:53 +02:00
Oliver Kowalke
8a9c9916c7 support this_fiber::yield() 2015-09-18 17:48:57 +02:00
Oliver Kowalke
bf0ea3749b add TODO comments 2015-09-18 17:32:19 +02:00
Oliver Kowalke
7a794647ae replace context::terminated_is_linked() by context::is_terminated()
- context::terminated_is_linked() might be missleading because this
  state is transient
- if the context is pushed to the terminated-queue,
  context::terminated_is_linked() returns true, if the context is
  removed from terminated-queue context::terminated_is_linked() returns
  false
- new flag flag_terminated intoduced
- flag_terminated will be set in context::set_terminated_(), which will
  be called for worker context' in the lambda
2015-09-16 22:17:01 +02:00
Oliver Kowalke
00ae711cd7 join only non-terminated fibers
- context::join() adds active-context to wait-queue only
  if joined context is not terminated
- we can not use terminated_is_linked() because the context
  might already be removed from scheudler's termianted-queue
2015-09-16 22:11:11 +02:00
Oliver Kowalke
a8e90aedb8 add joining a fiber 2015-09-16 20:51:26 +02:00
Oliver Kowalke
ddc5af0a36 run dispatcher context at scheduler destruction 2015-09-16 19:20:47 +02:00
Oliver Kowalke
6d43540a29 cleanup 2015-09-15 19:15:00 +02:00
Oliver Kowalke
abd1ff524c fixes for signaling interruption and wait 2015-09-11 18:42:16 +02:00
Oliver Kowalke
ebd147c08d fix join(), this_fiber::sleep_until() 2015-09-10 20:42:28 +02:00