summaryrefslogtreecommitdiff
path: root/lib/dialyzer/test/race_SUITE_data/src/whereis_control_flow4.erl
blob: 2a597607890866589fa2dcb120d92a41dbec1b25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
%% This tests the presence of possible races due to a whereis/register
%% combination. It takes into account control flow that might exist.

-module(whereis_control_flow4).
-export([start/1]).

start(Fun) ->
  case whereis(maria) of
    undefined ->
      Pid1 = spawn(Fun),
      case Pid1 =:= self() of
        true ->
          case whereis(kostis) of
            undefined ->
              Pid2 = spawn(Fun),
              case Pid2 =:= self() of
                true ->
                  register(maria, Pid1),
                  register(kostis, Pid2);
                false -> ok
              end;
            P when is_pid(P) ->
              ok
          end;
        false -> ok
      end;
    P when is_pid(P) ->
      ok
  end.