1%% This tests that the race condition detection between mnesia:dirty_read/
2%% mnesia:dirty_write is robust even when the functions are called with
3%% different atoms as arguments.
4
5-module(mnesia_diff_atoms_race2).
6-export([test/2]).
7
8-record(employee, {emp_no,
9                   name,
10                   salary,
11                   sex,
12                   phone,
13                   room_no}).
14
15-record(employer, {emp_no,
16                   name,
17                   salary,
18                   sex,
19                   phone,
20                   room_no}).
21
22test(Eno, Raise) ->
23  {race(employee, Eno, Raise), no_race(employee, Eno, Raise)}.
24
25race(Tab, Eno, Raise) ->
26    [E] = mnesia:dirty_read(Tab, Eno),
27    Salary = E#employee.salary + Raise,
28    New = E#employee{salary = Salary},
29    aux(New).
30
31no_race(Tab, Eno, Raise) ->
32    [E] = mnesia:dirty_read(Tab, Eno),
33    AnotherRecord = #employer{},
34    aux(AnotherRecord).
35
36aux(Record) ->
37  mnesia:dirty_write(Record).
38