4
-export([start/0, get_data/0, set_data/1]).
5
-export([init/1, system_continue/3, system_terminate/4,
6
system_code_change/4]).
8
-record(state, {data, last_pid}).
11
Pid = proc_lib:spawn_link(?MODULE, init, [self()]),
15
sp_server ! {self(), get_data},
17
{sp_server, Data} -> Data
21
sp_server ! {self(), set_data, Data}.
24
register(sp_server, self()),
25
process_flag(trap_exit, true),
26
loop(#state{last_pid = no_one}, Parent).
28
loop(State, Parent) ->
30
{system, From, Request} ->
31
sys:handle_system_msg(Request, From, Parent,
33
{'EXIT', Parent, Reason} ->
37
From ! {sp_server, State#state.data},
39
{From, set_data, Data} ->
40
loop(State#state{data = Data, last_pid = From}, Parent);
47
%% Here are the sys call back functions
48
system_continue(Parent, _, State) ->
51
system_terminate(Reason, Parent, _, State) ->
55
system_code_change({state, Data}, _Mod, 1, _Extra) ->
56
{ok, #state{data = Data, last_pid = no_one}};
57
system_code_change(#state{data = Data}, _Mod, {down, 1}, _Extra) ->