anchor.diff:  
   start_worker(Node, NodeMon, T) ->
       event_server:event(T#task.jobname, "~s:~B assigned to ~s",
  -        [T#task.mode, T#task.taskid, Node], []),
  +                       [T#task.mode, T#task.taskid, Node], []),
       spawn_link(disco_worker, start_link_remote,
  -        [self(), whereis(event_server), Node, NodeMon, T]).
  -
  -% callback stubs
  -terminate(Reason, _State) ->
  -    error_logger:warning_report({"Disco server dies", Reason}).
  -
  -code_change(_OldVsn, State, _Extra) -> {ok, State}.
  -
  +               [self(), whereis(event_server), Node, NodeMon, T]).
  +
  +process_exit(Pid, Msg, Code, S) ->
  +    process_exit1(gb_trees:lookup(Pid, S#state.workers), Pid, Msg, Code, S).
  +
  +process_exit1(none, _, _, _, S) -> {noreply, S};
  +process_exit1({_, {Node, T}}, Pid, Msg, Code, S) ->
  +    P = io_lib:fwrite("WARN: [~s:~B] ", [T#task.mode, T#task.taskid]),
  +    event_server:event(Node, T#task.jobname, lists:flatten(P, Msg), [],
  +                       {task_failed, T#task.mode}),
  +    gen_server:cast(self(), {exit_worker, Pid, {data_error, Code}}),
  +    {noreply, S}.
  
positive.code: 
  -define(PURGE_TIMEOUT, 86400000). % 24h
  
  start_link() ->
      error_logger:info_report([{"DISCO SERVER STARTS"}]),
      case gen_server:start_link({local, disco_server},
              disco_server, [], disco:debug_flags("disco_server")) of
          {ok, Server} ->
              case catch disco_config:get_config_table() of
                  {ok, _Config} ->
  
negative.code:             {ok, {JobSchedPid, {Node, Task}}} ->
                  M = gb_trees:get(Node, Nodes),
                  WorkerPid = start_worker(Node, M#dnode.node_mon, Task),
                  UWorkers = gb_trees:insert(WorkerPid, {Node, Task}, Workers),
                  gen_server:cast(JobSchedPid, {task_started, Node, WorkerPid}),
  
                  M1 = M#dnode{num_running = M#dnode.num_running + 1},
                  UNodes = gb_trees:update(Node, M1, Nodes),
                  S1 = S#state{nodes = UNodes, workers = UWorkers},
                  handle_cast(schedule_next, S1);
              nojobs ->
                  {noreply, S}
          end;
  