anchor.diff:        {false, M, TryLock};
       {false, M} ->
         Ticks = (Timeout div tick_period()) + 1,
  -      {false, M, [{Keys, Pid, Ticks} | TryLock]}
  +      {false, M, [{Keys, Pid, Tag, Ticks} | TryLock]}
     end.
   
   try_lock_and_monitor(Keys, Pid, M) ->
  
positive.code:   true = ets:delete(?MODULE),
    ok.
  
  handle_call({try_lock, Keys, Timeout}, {Pid, _Tag}
             , #s{ monitors = M0
                 , try_lock = TryLock0} = S) ->
    case lists:keyfind(Pid, 1, M0) of
  
negative.code: 
  handle_info(tick, #s{ try_lock = TryLock0
                      , monitors = M0} = S) ->
    case lists:foldl(fun({Keys, Pid, Tag, Ticks0}, {TryLock1, M1}) ->
                         case try_lock_and_monitor(Keys, Pid, M1) of
                           {true, M2} ->
                             gen_server:reply({Pid, Tag}, true),
                             {TryLock1, M2};
                           {false, M2} ->
                             case Ticks0 - 1 of
                               Ticks when Ticks > 0 ->
                                 {[{Keys, Pid, Tag, Ticks} | TryLock1], M2};
                               _Ticks ->
                                 gen_server:reply({Pid, Tag}, false),
                                 {TryLock1, M2}
                             end
                         end
  