• Gerrit Renker's avatar
    [DCCP] ccid3: Perform history operations only after packet has been sent · c5a1ae9a
    Gerrit Renker authored
     This migrates all packet history operations into the routine
     ccid3_hc_tx_packet_sent, thereby removing synchronization problems
     that occur when, as before, the operations are spread over multiple
     routines.
     The following minor simplifications are also applied:
      * several simplifications now follow from this change - several tests
        are now no longer required
      * removal of one unnecessary variable (dp)
    
    Justification:
    
     Currently packet history operations span two different routines,
     one of which is likely to pass through several iterations of sleeping
     and awakening.
     The first routine, ccid3_hc_tx_send_packet, allocates an entry and
     sets a few fields. The remaining fields are filled in when the second
     routine (which is not within a sleeping context), ccid3_hc_tx_packet_sent,
     is called. This has several strong drawbacks:
      * it is not necessary to split history operations - all fields can be
        filled in by the second routine
      * the first routine is called multiple times, until a packet can be sent,
        and sleeps meanwhile - this causes a lot of difficulties with regard to
        keeping the list consistent
      * since both routines do not have a producer-consumer like synchronization,
        it is very difficult to maintain data across calls to these routines
      * the fact that the routines are called in different contexts (sleeping, not
        sleeping) adds further problems
    Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    Acked-by: default avatarIan McDonald <ian.mcdonald@jandi.co.nz>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
    c5a1ae9a
ccid3.c 36.6 KB