[Serdev] CVS:commitlog: sip_router/modules/tm t_reply.c timer.c

Jan Janak jan at iptel.org
Wed Jun 1 13:44:01 UTC 2005


janakj      2005/06/01 15:44:01 CEST

  SER CVS Repository

  Modified files:        (Branch: rel_0_9_0)
    modules/tm           t_reply.c timer.c 
  Log:
  - Fixed the following race condition:
  
    Process_A sends a 487 over looback to the same ser instance
    (this process did not set up the retransmission timer yet because
    of the kernel context switch, see below)
  
    -- kernel switches context now to process_B
  
    Process_B wakes up to process the 487 and it sends an ACK
    immediately (over loopback again)
  
    -- kernel switches context again now to process_C
  
    Process_C wakes up to process the ACK, it tries to find the original
    transaction (the one which sent 487) and tries to remove the
    transaction from the retransmission timer list (which has not been
    set yet in Process_A)
  
    The process finishes now.
  
    -- kernel switches context back to Process_A
  
    Now the process prints info that 487 was relayed and sets up
    the retransmission timer
  
    The process finishes
  
    <after approximately 500ms>
  
    Process_D (timer) wakes up and generates a 487 retransmission although
    an ACK has already been received and processed
  
  Revision  Changes    Path
  1.98.2.3  +104 -86   sip_router/modules/tm/t_reply.c
http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/t_reply.c.diff?r1=1.98.2.2&r2=1.98.2.3
  1.58.2.1  +41 -16    sip_router/modules/tm/timer.c
http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/sip_router/modules/tm/timer.c.diff?r1=1.58&r2=1.58.2.1




More information about the Serdev mailing list