aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/test/race_tests_SUITE_data/src/ets_insert_diff_atoms_race6.erl
blob: 17457e2b4431f55c08c67a6fcffdaaaa3ee5fed5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%% This tests that the race condition detection between ets:lookup/
%% ets:insert is robust even when the functions are called with
%% different atoms as arguments.

-module(ets_insert_diff_atoms_race6).
-export([test/0]).

test() ->
  ets:new(foo, [named_table, public]),
  {race(foo, counter), no_race(foo, counter)}.

race(Tab, Counter) ->
    [{_, N}] = ets:lookup(Tab, Counter),
    aux(Tab, Counter, N).

no_race(Tab, Counter) ->
    [{_, N}] = ets:lookup(Tab, Counter),
    AnotherCounter = index,
    aux(Tab, AnotherCounter, N).

aux(Table, Counter, N) -> 
  ets:insert(Table, {Counter, N+1}).