aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/src/ets.erl
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2017-03-22 15:41:31 +0100
committerSverker Eriksson <[email protected]>2017-03-22 15:41:31 +0100
commitb4ac8b2b32f094217d0533ee139273923c3a8af7 (patch)
treed03faaf73e8caa32c112cfb7224cdb1efdd23ec4 /lib/stdlib/src/ets.erl
parentf3e86bb18b9b60504e756e3018f8777fdd0d8bc5 (diff)
parent772f04770bdec7341f63bf4fddb7b893b4ffdd27 (diff)
downloadotp-b4ac8b2b32f094217d0533ee139273923c3a8af7.tar.gz
otp-b4ac8b2b32f094217d0533ee139273923c3a8af7.tar.bz2
otp-b4ac8b2b32f094217d0533ee139273923c3a8af7.zip
Merge branch 'sverker/ets-table-identifiers/OTP-14094'
* sverker/ets-table-identifiers: observer: Polish crashdump viewer for ETS observer: Polish Table Viewer tab stdlib: Remove ets_SUITE:memory_check_summary erts: Improve reduction count during table cleanup erts: Cleanup table status bits erts: Remove now redundant 'id' from DbTableCommon erts: Remove meta_main_tab erts: Pass tid argument down to trapping functions erts: Print table id as ref in crashdump and break menu erts: Replace meta_pid_to{_fixed}_tab with linked lists erts: Correct erl_rbtree comments about yielding erts: Add ERTS_RBT_YIELD_STAT_INIT to erl_rbtree Fix node_container_SUITE list_to_ref/1 Implement ets:all() using scheduler specific data Rename fixation count in ets table to avoid confusion Introduce references as table identifiers
Diffstat (limited to 'lib/stdlib/src/ets.erl')
-rw-r--r--lib/stdlib/src/ets.erl18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/stdlib/src/ets.erl b/lib/stdlib/src/ets.erl
index d6fd1e3ea1..90e19e6b9f 100644
--- a/lib/stdlib/src/ets.erl
+++ b/lib/stdlib/src/ets.erl
@@ -75,10 +75,28 @@
take/2,
update_counter/3, update_counter/4, update_element/3]).
+%% internal exports
+-export([internal_request_all/0]).
+
-spec all() -> [Tab] when
Tab :: tab().
all() ->
+ receive_all(ets:internal_request_all(),
+ erlang:system_info(schedulers),
+ []).
+
+receive_all(_Ref, 0, All) ->
+ All;
+receive_all(Ref, N, All) ->
+ receive
+ {Ref, SchedAll} ->
+ receive_all(Ref, N-1, SchedAll ++ All)
+ end.
+
+-spec internal_request_all() -> reference().
+
+internal_request_all() ->
erlang:nif_error(undef).
-spec delete(Tab) -> true when