Changeset 5909


Ignore:
Timestamp:
Nov 21, 2018 8:22:34 AM (9 months ago)
Author:
riza
Message:

Close #2161: Avoid deadlock triggered by incoming message when transport is being shutdown.

Location:
pjproject/trunk/pjsip/src
Files:
4 edited

Legend:

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

    r5759 r5909  
    23892389 
    23902390    if (tsx->transport) { 
    2391         pjsip_transport_remove_state_listener(tsx->transport,  
    2392                                                tsx->tp_st_key, tsx); 
     2391        if (tsx->tp_st_key) { 
     2392            pjsip_transport_remove_state_listener(tsx->transport, 
     2393                                                  tsx->tp_st_key, tsx); 
     2394        } 
    23932395        pjsip_transport_dec_ref( tsx->transport ); 
    23942396        tsx->transport = NULL; 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport.c

    r5886 r5909  
    24402440    PJ_ASSERT_RETURN(tp && cb && key, PJ_EINVAL); 
    24412441 
     2442    if (tp->is_shutdown) { 
     2443        *key = NULL; 
     2444        return PJ_EINVALIDOP; 
     2445    } 
     2446 
    24422447    pj_lock_acquire(tp->lock); 
    24432448 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r5906 r5909  
    39153915    unsigned i = 0; 
    39163916 
     3917    PJSUA_LOCK(); 
    39173918    if (acc->cfg.ip_change_cfg.hangup_calls ||  
    39183919        acc->cfg.ip_change_cfg.reinvite_flags) 
     
    39843985    }     
    39853986    acc->ip_change_op = PJSUA_IP_CHANGE_OP_NULL; 
     3987    PJSUA_UNLOCK(); 
    39863988    return status; 
    39873989} 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_core.c

    r5876 r5909  
    35473547    pj_bool_t acc_done[PJSUA_MAX_ACC]; 
    35483548 
     3549    PJSUA_LOCK(); 
    35493550    /* Reset ip_change_active flag. */ 
    35503551    for (; i < (int)PJ_ARRAY_SIZE(pjsua_var.acc); ++i) { 
     
    36613662        } 
    36623663    } 
     3664    PJSUA_UNLOCK(); 
    36633665    return status; 
    36643666} 
     
    37733775     
    37743776    if (param->restart_listener) { 
     3777        PJSUA_LOCK(); 
    37753778        /* Restart listener/transport, handle_ip_change_on_acc() will 
    37763779         * be called after listener restart is completed successfully. 
     
    37863789            } 
    37873790        } 
     3791        PJSUA_UNLOCK(); 
    37883792    } else { 
    37893793        status = handle_ip_change_on_acc(); 
Note: See TracChangeset for help on using the changeset viewer.