anchor.diff:      timer:sleep(?GC_INTERVAL),
       loop().
   
  +ddfs_delete(Tag) ->
  +    ddfs:delete({ddfs_master, get(master)}, Tag, internal).
  +
  +get_purged() ->
  +    gen_server:call({disco_server, get(master)}, get_purged).
  +
  +get_jobs() ->
  +    gen_server:call({event_server, get(master)}, get_jobs).
  +
   -spec process_dir([string()], gb_set(), gb_set()) -> 'ok'.
   process_dir([], _Purged, _Active) -> ok;
   process_dir([Dir|R], Purged, Active) ->
  -    Path = filename:join(get(root), Dir),
  +    Path = disco:data_path(node, Dir),
       {ok, Jobs} = prim_file:list_dir(Path),
       [process_job(filename:join(Path, Job), Purged) ||
           Job <- Jobs, ifdead(Job, Active)],
  
positive.code:             Now = calendar:datetime_to_gregorian_seconds(calendar:local_time()),
              Job = filename:basename(JobPath),
              IsPurged = gb_sets:is_member(list_to_binary(Job), Purged),
              GCAfter = get(gcafter),
              if IsPurged; Now - T > GCAfter ->
                  ddfs:delete(get(ddfs), disco:oob_name(Job), internal),
                  os:cmd("rm -Rf " ++ JobPath);
              true ->
                  ok
  
negative.code: 
  -define(GC_INTERVAL, 600000).
  
  -spec start_link(pid()) -> no_return().
  start_link(Master) ->
      case catch register(temp_gc, self()) of
          {'EXIT', {badarg, _}} ->
              exit(already_started);
          _ -> ok
      end,
      put(master, Master),
      loop().
  
  -spec loop() -> no_return().
  loop() ->
      case catch {get_purged(), get_jobs()} of
          {{ok, Purged}, {ok, Jobs}} ->
              case prim_file:list_dir(disco:data_root(node())) of
                  {ok, Dirs} ->
                      Active = gb_sets:from_list(
                          [Name || {Name, active, _Start, _Pid} <- Jobs]),
  