You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
The key has expired.
Simplified the portable default executor to use a priority queue instead of separate queues for each priority
Simplified logic for blocking_get()
Added support for blocking_get() to steal tasks when using the portable task system with exponential backoff
Fixed a bug where setting the exception on a promise does not resolve the promise, and so subsequent destruction of the promise would change the exception to a broken_promise.
Fixed two places where objects captured by lambdas were subsequently moved, but the lambdas were not marked as mutable. This meant that you could not move a future passed to recover().
Disabled the task() template constructor in the case where the passed function was a task so that it doesn't match the copy constructor. Previously if you copied a task it would compile, but infinitely recurse when executed. Now copying a task will not compile.
Fixed an issue where the task invoke arguments where always getting declared as rvalues (I think someone tried to make them universal references) - added a comment to avoid the mistake in the future.
Made the top-level task invoke actually use universal references and perfect forwarding.
Reduced the size of task for small object optimization (now will usually be size of 8 pointers, with 6 pointers of space for the small object)
Fixed tasks for objects that require more than maximum alignment.
Lifted the invoke vtable entry for task into the local task, filling an otherwise empty memory slot (on most architectures).
Removed the move() on the invoke calls in task, these were intended to make all tasks single execution, but many are not, and so this is a slightly dangerous and, as far as I know, unused optimization. If needed it could come back as a new virtual (rvalue invoke) call and only be used with the task actually is an rvalue.