anchor.diff:          NewState = State#state{
              busy = Busy2,
              free = Free2,
  -           waiting = Waiting2
  +           waiting = Waiting2,
  +           callers = NewCallers1
           },
           {noreply, NewState};
      false ->
  -        {noreply, State}
  +        {noreply, State#state{callers = NewCallers0}}
      end.
   
   handle_info({'EXIT', Pid, _Reason}, State) ->
  
positive.code:     limit,                  % max # of workers allowed
      free = [],              % free workers (connections)
      busy = [],              % busy workers (connections)
      waiting = queue:new(),   % blocked clients waiting for a worker
      callers = ets:new(callers,[set]) % clients who've been given a worker
  }).
  
  
  
negative.code: 
  handle_cast({release_worker, Worker}, State) ->
      #state{waiting = Waiting, callers = Callers} = State,
      NewCallers0 = demonitor_client(Callers, Worker),
      case is_process_alive(Worker) andalso
          lists:member(Worker, State#state.busy) of
      true ->
          case queue:out(Waiting) of
          {empty, Waiting2} ->
              NewCallers1 = NewCallers0,
              Busy2 = State#state.busy -- [Worker],
              Free2 = [Worker | State#state.free];
          {{value, From}, Waiting2} ->
              NewCallers1 = monitor_client(Callers, Worker, From),
              gen_server:reply(From, {ok, Worker}),
              Busy2 = State#state.busy,
              Free2 = State#state.free
  