diff options
author | Sverker Eriksson <[email protected]> | 2017-09-21 19:21:18 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2017-11-15 20:10:33 +0100 |
commit | b17db5ae892a8b9c48f8f94f7219c60fe122f629 (patch) | |
tree | 2fdac0d9dfff92e57b09b158ed0b5b3cef277f22 /erts/emulator/test/node_container_SUITE.erl | |
parent | d332dcea887f9f13726bb31c1b70ae7c4c98cade (diff) | |
download | otp-b17db5ae892a8b9c48f8f94f7219c60fe122f629.tar.gz otp-b17db5ae892a8b9c48f8f94f7219c60fe122f629.tar.bz2 otp-b17db5ae892a8b9c48f8f94f7219c60fe122f629.zip |
erts: Fix bug in DistEntry refc dance
to handle "lookup without refc++" correctly
which was introduced in 4dcb2ae7810a507b701a30072b2f514cab7ebbdb.
When decrementing refc to zero (in try_delete or prepare_try_delete)
we must always wait thread progress to make sure no thread has done
lookup without refc++ and is just about to do refc++ and thereby revive
the DistEntry. That is, we wait for a potential other thread to either
do refc++ or drop its pointer to the DistEntry.
And if that other thread does refc++ (in erts_ref_dist_entry)
it must also do the extra refc++ for the scheduled pending delete.
Diffstat (limited to 'erts/emulator/test/node_container_SUITE.erl')
-rw-r--r-- | erts/emulator/test/node_container_SUITE.erl | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/erts/emulator/test/node_container_SUITE.erl b/erts/emulator/test/node_container_SUITE.erl index be90f929df..7df001fec5 100644 --- a/erts/emulator/test/node_container_SUITE.erl +++ b/erts/emulator/test/node_container_SUITE.erl @@ -966,6 +966,8 @@ check_refc(ThisNodeName,ThisCreation,Table,EntryList) when is_list(EntryList) -> {case Referrer of {system,delayed_delete_timer} -> true; + {system,thread_progress_delete_timer} -> + true; _ -> DDT end, |