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