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
Fix corruption when remarking a pool in another domain and that domain allocates #466
Comments
After some back and forth with some of the ways to fix this, I've got one that might work based around passing the pool back to its owner. Care is needed to handle:
With these in mind, my current thinking is that this would work:
|
This looks reasonable to me. Given that remarking is rare, this queue could just be a lock-protected linked list, couldn't it? How does work end up in the global remark queue? |
Absolutely - I was assuming the queues would be a lock-protected linked list.
If when trying to push work to a target domain, we discover that domain is not accepting work (because it is terminating) we push the work to the global remark queue. I was thinking we could do away with the global remark queue and requeue to your own remark queue in the case that the target domain is terminating, but you could end up with deadlock as follows:
The global remark queue ensures that the domain local remark queues can always be drained independent of the state of any other domain and so avoids deadlocks that could occur with terminating domains. |
Ok. Global remark queue sounds reasonable. |
We have had a number of CI failures recently; particularly with the bytecode test for
parallel/domain_parallel_spawn_burn
. The segfaults are non-deterministic and quite horrible to reproduce inrr
(very time consuming); however you can get the crash ingdb
with some patience.Probing around, I have isolated a problem in the way we handle remarking pools due to a mark stack overflow. The particular issue is:
We have identified a couple of ways to fix this:
The text was updated successfully, but these errors were encountered: