anchor.diff:      {stop, {shutdown, {fatal, Reason}}, State};
   
   handle_info({'DOWN', _, _, _, Info}, State) ->
  -    {stop, {shutdown, {fatal, Info}}, State}.
  -
  -handle_call(kill_worker, _From, State) ->
  -    {stop, {shutdown, {fatal, "Worker killed"}}, State};
  -
  -handle_call({work, JobHome}, _From, #state{task = Task, port = none} = State) ->
  +    {stop, {shutdown, {fatal, Info}}, State};
  +
  +handle_info({work, JobHome}, #state{task = Task, port = none} = State) ->
       Worker = filename:join(JobHome, binary_to_list(Task#task.worker)),
       file:change_mode(Worker, 8#755),
       Command = "nice -n 19 " ++ Worker,
  
positive.code:     {ok, State}.
  
  jobhome(JobName) ->
      disco:jobhome(JobName, disco_node:home()).
  
  make_jobhome(JobName, Master) ->
      JobHome = jobhome(JobName),
  
negative.code: 
  start_link({Parent, Master, Task}) ->
      process_flag(trap_exit, true),
      _Worker = case catch gen_server:start_link(disco_worker, {Master, Task}, []) of
                  {ok, Server} ->
                       Server;
                   Reason ->
                       Msg = io_lib:fwrite("Worker initialization failed: ~p",
                                           [Reason]),
                       exit({error, Msg})
               end,
      Parent ! ok,
      % NB: start_worker call is known to timeout if the node is really
      % busy - it should not be a fatal problem
      %case catch gen_server:call(Worker, start_worker, 30000) of
      %    ok ->
      %        Parent ! ok;
      %    Reason1 ->
      %        exit({worker_dies, {"Worker startup failed: ~p",
      %            [Reason1]}})
      %end,
      wait_for_exit().
  
  init({Master, Task}) ->
  