Ignore:
Timestamp:
Mar 29, 2017 2:40:48 AM (3 years ago)
Author:
ming
Message:

Fixed #2002: Deadlock between PJSUA LOCK, transaction group lock, and UA mutex

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsip/sip_transaction.c

    r5572 r5573  
    642642 * Find a transaction. 
    643643 */ 
    644 PJ_DEF(pjsip_transaction*) pjsip_tsx_layer_find_tsx( const pj_str_t *key, 
    645                                                      pj_bool_t lock ) 
     644static pjsip_transaction* find_tsx( const pj_str_t *key, pj_bool_t lock, 
     645                                    pj_bool_t add_ref ) 
    646646{ 
    647647    pjsip_transaction *tsx; 
     
    655655    /* Prevent the transaction to get deleted before we have chance to lock it. 
    656656     */ 
    657     if (tsx && lock) 
     657    if (tsx) 
    658658        pj_grp_lock_add_ref(tsx->grp_lock); 
    659659     
     
    667667    PJ_RACE_ME(5); 
    668668 
    669     if (tsx && lock) { 
    670         pj_grp_lock_acquire(tsx->grp_lock); 
    671         pj_grp_lock_dec_ref(tsx->grp_lock); 
     669    if (tsx) { 
     670        if (lock) 
     671            pj_grp_lock_acquire(tsx->grp_lock); 
     672 
     673        if (!add_ref) 
     674            pj_grp_lock_dec_ref(tsx->grp_lock); 
    672675    } 
    673676 
    674677    return tsx; 
     678} 
     679 
     680 
     681PJ_DEF(pjsip_transaction*) pjsip_tsx_layer_find_tsx( const pj_str_t *key, 
     682                                                     pj_bool_t lock ) 
     683{ 
     684    return find_tsx(key, lock, PJ_FALSE); 
     685} 
     686 
     687 
     688PJ_DEF(pjsip_transaction*) pjsip_tsx_layer_find_tsx2( const pj_str_t *key, 
     689                                                      pj_bool_t add_ref ) 
     690{ 
     691    return find_tsx(key, PJ_FALSE, add_ref); 
    675692} 
    676693 
Note: See TracChangeset for help on using the changeset viewer.