anchor.diff:  %% any given time, implement both queues in the same ets table. The
   %% absolute value of the first element of the 2-tuple is the queue
   %% length, the sign says which queue it is.
  +
  +%% downgrade/1
  +%%
  +%% Revert to the pre-pool_size representation when possible, for
  +%% backwards compatibility in the case that the pool_size option
  +%% hasn't been used.
  +
  +downgrade(#listener{pending = {-1,Q}} = S) ->
  +    TPid = ets:first(Q),
  +    ets:delete(Q, TPid),
  +    S#listener{pending = [TPid | {0,Q}]};
  +
  +downgrade(S) ->
  +    S.
   
   %% ---------------------------------------------------------------------------
   %% # code_change/3
  
positive.code: %% queue or spawned and placed in the first queue. Thus, there are
  %% only elements in one queue at a time, so share an ets table queue
  %% and tag it with a positive length if it contains the first queue, a
  %% negative length if it contains the second queue.
  
  %% ---------------------------------------------------------------------------
  %% # start/3
  
negative.code:     handle_info(T, upgrade(S));
  
  handle_info(T, #listener{} = S) ->
      {noreply, downgrade(#listener{} = l(T,S))}.
  
  %% upgrade/1
  
  