anchor.diff:  %% Description: Handling all non call/cast messages
   %%--------------------------------------------------------------------
   handle_info(cleanup_table, S) ->
  -    %% TODO: Dig old offenders up and free them from the prison.
  +    Bound = etorrent_time:subtract_now_seconds(now(), ?GRACE_TIME),
  +    true = ets:match_select(etorrent_bad_peer,
  +			    [{{bad_peer,'_','_','$1'},[{'<','$1',Bound}],[]}]),
       {noreply, S};
   handle_info(_Info, State) ->
       {noreply, State}.
  
positive.code: 
  -define(SERVER, ?MODULE).
  -define(DEFAULT_BAD_COUNT, 2).
  -define(GRACE_TIME, timer:seconds(900)).
  
  %%====================================================================
  %% API
  
negative.code: %%--------------------------------------------------------------------
  init([]) ->
      process_flag(trap_exit, true),
      _Tref = timer:send_interval(?CHECK_TIME, self(), cleanup_table),
      _Tid = ets:new(etorrent_bad_peer, [set, protected, named_table,
  				       {keypos, #bad_peer.ipport}]),
      {ok, #state{}}.
  