• David Howells's avatar
    rxrpc: Fix the call timer handling · 405dea1d
    David Howells authored
    The call timer's concept of a call timeout (of which there are three) that
    is inactive is that it is the timeout has the same expiration time as the
    call expiration timeout (the expiration timer is never inactive).  However,
    I'm not resetting the timeouts when they expire, leading to repeated
    processing of expired timeouts when other timeout events occur.
    
    Fix this by:
    
     (1) Move the timer expiry detection into rxrpc_set_timer() inside the
         locked section.  This means that if a timeout is set that will expire
         immediately, we deal with it immediately.
    
     (2) If a timeout is at or before now then it has expired.  When an expiry
         is detected, an event is raised, the timeout is automatically
         inactivated and the event processor is queued.
    
     (3) If a timeout is at or after the expiry timeout then it is inactive.
         Inactive timeouts do not contribute to the timer setting.
    
     (4) The call timer callback can now just call rxrpc_set_timer() to handle
         things.
    
     (5) The call processor work function now checks the event flags rather
         than checking the timeouts directly.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    405dea1d
call_object.c 15.6 KB