anchor.diff:  
   %% Current watchdog has timed out.
   transition({timeout, TRef, tw}, #watchdog{tref = TRef} = S) ->
  -    set_watchdog(timeout(S));
  -
  -%% Timer was canceled after message was already sent.
  -transition({timeout, _, tw}, #watchdog{}) ->
  -    ok;
  +    set_watchdog(0, timeout(S));
  +
  +%% Message has arrived since the timer was started: subtract time
  +%% already elapsed from new timer.
  +transition({timeout, _, tw}, #watchdog{tref = T0} = S) ->
  +    set_watchdog(diameter_lib:micro_diff(T0) div 1000, S);
   
   %% State query.
   transition({state, Pid}, #watchdog{status = S}) ->
  
positive.code: 
  %% set_watchdog/1
  
  set_watchdog(#watchdog{tw = TwInit,
                         tref = TRef}
               = S) ->
      cancel(TRef),
      S#watchdog{tref = erlang:start_timer(tw(TwInit), self(), tw)};
  set_watchdog(stop = No) ->
      No.
  
  cancel(undefined) ->
      ok;
  cancel(TRef) ->
      erlang:cancel_timer(TRef).
  
  tw(T)
    when is_integer(T), T >= 6000 ->
  
negative.code:          %% end PCB
           parent = self() :: pid(),              %% service process
           transport       :: pid() | undefined,  %% peer_fsm process
           tref :: reference()      %% reference for current watchdog timer
                 | integer()        %% monotonic time
                 | tuple()          %% now()
                 | undefined,
           dictionary :: module(),  %% common dictionary
           receive_data :: term(),
                   %% term passed into diameter_service with incoming message
  