123456789101112131415161718192021222324252627282930313233343536373839 |
- -module(ebb_worker).
- -export([start_link/3, start_link/4, stop/1]).
- -export([worker/3, worker/4]).
- start_link(Func, Args, Receiver) ->
- try
- spawn_link(?MODULE, worker, [Func, Args, Receiver])
- of
- Pid -> {ok, Pid}
- catch
- Error -> Error
- end.
- start_link(distributed, Func, Args, Receiver) ->
- Node = ebb_work_manager:available_node(),
- start_link(Node, Func, Args, Receiver);
- start_link(Node, Func, Args, Receiver) ->
- try
- Result = spawn_link(Node, ?MODULE, worker,
- [Node, Func, Args, Receiver]),
- ebb_work_manager:start_work(Node),
- Result
- of
- Pid -> {ok, Pid}
- catch
- Error -> Error
- end.
- worker(Func, Args, Receiver) ->
- ebb_event:return(Receiver, apply(Func, Args)).
- worker(Node, Func, Args, Receiver) ->
- ebb_event:return(Receiver, apply(Func, Args)),
- ebb_work_manager:work_finished(Node).
- stop(Worker) ->
- exit(Worker, kill).
|