New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fiber.join() blocks in 'suspended' if fiber has cancelled #3948
Comments
sergepetrenko
added a commit
that referenced
this issue
Feb 4, 2019
In case a fiber joining another fiber gets cancelled, it stays suspended forever and never finishes joining. This happens because fiber_cancel() wakes the fiber and removes it from all execution queues. Fix this by adding ourselves to the joined fibers wake queue on every iteration. While joining the fiber ignores cancelation. Also, while we're at it, fix comment for fiber_yield(): it obviously is a cancellation point. Closes #3948
sergepetrenko
added a commit
that referenced
this issue
Feb 5, 2019
In case a fiber joining another fiber gets cancelled, it stays suspended forever and never finishes joining. This happens because fiber_cancel() wakes the fiber and removes it from all execution queues. Fix this by handling possible cancellation in fiber_join(). Closes #3948
sergepetrenko
added a commit
that referenced
this issue
Feb 6, 2019
In case a fiber joining another fiber gets cancelled, it stays suspended forever and never finishes joining. This happens because fiber_cancel() wakes the fiber and removes it from all execution queues. Fix this by adding the fiber back to the wakeup queue of the joined fiber after each yield. Closes #3948
sergepetrenko
added a commit
that referenced
this issue
Feb 6, 2019
In case a fiber joining another fiber gets cancelled, it stays suspended forever and never finishes joining. This happens because fiber_cancel() wakes the fiber and removes it from all execution queues. Fix this by adding the fiber back to the wakeup queue of the joined fiber after each yield. Closes #3948
locker
pushed a commit
that referenced
this issue
Feb 6, 2019
In case a fiber joining another fiber gets cancelled, it stays suspended forever and never finishes joining. This happens because fiber_cancel() wakes the fiber and removes it from all execution queues. Fix this by adding the fiber back to the wakeup queue of the joined fiber after each yield. Closes #3948 (cherry picked from commit d69c149)
SudoBobo
pushed a commit
that referenced
this issue
Feb 8, 2019
In case a fiber joining another fiber gets cancelled, it stays suspended forever and never finishes joining. This happens because fiber_cancel() wakes the fiber and removes it from all execution queues. Fix this by adding the fiber back to the wakeup queue of the joined fiber after each yield. Closes #3948
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Bug description: This code leads to "func" fiber remains in a 'suspended' state even after the expected fiber (another_func) has ended.
Tarantool version: 2.1.1-185-gf583b6c82
OS version: macOS 10.14.1
fiber.info() print grep for 'suspended' fiber:
The text was updated successfully, but these errors were encountered: