• G
    dccp ccid-3: Remove dead states · d0995e6a
    Gerrit Renker 提交于
    This patch is thanks to an investigation by Leandro Sales de Melo and his
    colleagues. They worked out two state diagrams which highlight the fact that
    the xxx_TERM states in CCID-3/4 are in fact not necessary.
    
    And this can be confirmed by in turn looking at the code: the xxx_TERM states
    are only ever set in ccid3_hc_{rx,tx}_exit(). These two functions are part
    of the following call chain:
    
     * ccid_hc_{tx,rx}_exit() are called from ccid_delete() only;
     * ccid_delete() invokes ccid_hc_{tx,rx}_exit() in the way of a destructor:
       after calling ccid_hc_{tx,rx}_exit(), the CCID is released from memory;
     * ccid_delete() is in turn called only by ccid_hc_{tx,rx}_delete();
     * ccid_hc_{tx,rx}_delete() is called only if 
       - feature negotiation failed   (dccp_feat_activate_values()),
       - when changing the RX/TX CCID (to eject the current CCID),
       - when destroying the socket   (in dccp_destroy_sock()).
    
    In other words, when CCID-3 sets the state to xxx_TERM, it is at a time where
    no more processing should be going on, hence it is not necessary to introduce
    a dedicated exit state - this is implicit when unloading the CCID.
    
    The patch removes this state, one switch-statement collapses as a result.
    Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
    d0995e6a
ccid3.h 5.3 KB