aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2017-09-21 19:21:18 +0200
committerSverker Eriksson <[email protected]>2017-11-15 20:10:33 +0100
commitb17db5ae892a8b9c48f8f94f7219c60fe122f629 (patch)
tree2fdac0d9dfff92e57b09b158ed0b5b3cef277f22 /erts/emulator/test
parentd332dcea887f9f13726bb31c1b70ae7c4c98cade (diff)
downloadotp-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')
-rw-r--r--erts/emulator/test/node_container_SUITE.erl2
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,