Commit d0e76dbb authored by Maged Michael's avatar Maged Michael Committed by Facebook Github Bot

hazptr: Fix batch push obj

Summary:
Fix missing null check.
It is possible for a thread to successfully CAS count from >= threshold to 0 and also pop an empty list.
Example with 2 threads:
- Batch contains Threshold - 1 objects
- Thread 1 pushes an object, finds count == Threshold, CAS-es count to 0 successfully.
- Thread 2 pushes Threshold more objects, finds count == Threshold, CAS-es count to 0 successfully.
- Thread 1 pops all 2xThreshold objects (that's ok)
- Thread 2 pops 0 objects (that's ok too but we need to do null check before dereferencing the head of the list).

Reviewed By: davidtgoldblatt

Differential Revision: D17680391

fbshipit-source-id: a1d68997668077cc0b34cc66405628ed2f95702b
parent 2cc6ef64
main v2022.02.14.00 v2022.02.07.00 v2022.01.31.00 v2022.01.24.00 v2022.01.17.00 v2022.01.10.00 v2022.01.03.00 v2021.12.27.00 v2021.12.20.00 v2021.12.13.00 v2021.12.06.00 v2021.11.29.00 v2021.11.15.00 v2021.11.08.00 v2021.11.01.00 v2021.10.25.00 v2021.10.18.00 v2021.10.11.00 v2021.10.04.00 v2021.09.27.00 v2021.09.20.00 v2021.09.13.00 v2021.09.06.00 v2021.08.30.00 v2021.08.23.00 v2021.08.02.00 v2021.07.22.00 v2021.07.20.01 v2021.07.20.00 v2021.06.28.00 v2021.06.14.00 v2021.06.07.00 v2021.05.31.00 v2021.05.24.00 v2021.05.17.00 v2021.05.10.00 v2021.05.03.00 v2021.04.26.00 v2021.04.19.00 v2021.04.12.00 v2021.04.05.00 v2021.03.29.00 v2021.03.22.00 v2021.03.15.00 v2021.03.08.00 v2021.03.01.00 v2021.02.22.00 v2021.02.15.00 v2021.02.08.00 v2021.02.01.00 v2021.01.25.00 v2021.01.18.01 v2021.01.18.00 v2021.01.11.00 v2021.01.04.00 v2020.12.28.00 v2020.12.21.00 v2020.12.14.00 v2020.12.07.00 v2020.11.30.00 v2020.11.23.00 v2020.11.16.00 v2020.11.09.00 v2020.11.02.00 v2020.10.26.00 v2020.10.19.00 v2020.10.12.00 v2020.10.05.00 v2020.09.28.00 v2020.09.21.00 v2020.09.14.00 v2020.09.07.00 v2020.08.31.00 v2020.08.24.00 v2020.08.17.00 v2020.08.10.00 v2020.08.03.00 v2020.07.27.00 v2020.07.20.00 v2020.07.13.00 v2020.07.06.00 v2020.06.29.00 v2020.06.15.00 v2020.06.08.00 v2020.06.01.00 v2020.05.25.00 v2020.05.18.00 v2020.05.11.00 v2020.05.04.00 v2020.04.27.00 v2020.04.20.00 v2020.04.13.00 v2020.04.06.00 v2020.03.30.00 v2020.03.23.00 v2020.03.16.00 v2020.03.09.00 v2020.03.02.00 v2020.02.24.00 v2020.02.17.00 v2020.02.10.00 v2020.02.03.00 v2020.01.27.00 v2020.01.20.00 v2020.01.13.00 v2020.01.06.00 v2019.12.30.00 v2019.12.23.00 v2019.12.16.00 v2019.12.09.00 v2019.12.06.00 v2019.12.02.00 v2019.11.11.00 v2019.11.04.00 v2019.10.28.00 v2019.10.21.00 v2019.10.14.00 v2019.10.07.00
No related merge requests found
...@@ -387,7 +387,7 @@ class hazptr_obj_batch { ...@@ -387,7 +387,7 @@ class hazptr_obj_batch {
while (c >= kThreshold) { while (c >= kThreshold) {
if (cas_count(c, 0)) { if (cas_count(c, 0)) {
List ll = l_.pop_all(); List ll = l_.pop_all();
if (ll.head()->tagged()) { if (ll.head() && ll.head()->tagged()) {
pushed_to_domain_tagged_.store(true, std::memory_order_relaxed); pushed_to_domain_tagged_.store(true, std::memory_order_relaxed);
} }
if (kIsDebug) { if (kIsDebug) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment