Ignore:
Timestamp:
Aug 1, 2018 9:22:26 AM (6 years ago)
Author:
riza
Message:

Fixed #2137: Race condition in 183 re-transmission can result in a deadlock.

File:
1 edited

Legend:

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

    r5701 r5851  
    644644} 
    645645 
     646/* Clone pjsip_tx_data. */ 
     647PJ_DEF(pj_status_t) pjsip_tx_data_clone(const pjsip_tx_data *src, 
     648                                        unsigned flags, 
     649                                        pjsip_tx_data ** p_tdata) 
     650{ 
     651    pjsip_tx_data *dst; 
     652    const pjsip_hdr *hsrc; 
     653    pjsip_msg *msg; 
     654    pj_status_t status; 
     655 
     656    PJ_UNUSED_ARG(flags); 
     657 
     658    status = pjsip_tx_data_create(src->mgr, p_tdata); 
     659    if (status != PJ_SUCCESS) 
     660        return status; 
     661 
     662    dst = *p_tdata; 
     663 
     664    msg = pjsip_msg_create(dst->pool, PJSIP_RESPONSE_MSG); 
     665    dst->msg = msg; 
     666    pjsip_tx_data_add_ref(dst); 
     667 
     668    /* Duplicate status line */ 
     669    msg->line.status.code = src->msg->line.status.code; 
     670    pj_strdup(dst->pool, &msg->line.status.reason, 
     671              &src->msg->line.status.reason); 
     672 
     673    /* Duplicate all headers */ 
     674    hsrc = src->msg->hdr.next; 
     675    while (hsrc != &src->msg->hdr) { 
     676        pjsip_hdr *h = (pjsip_hdr*) pjsip_hdr_clone(dst->pool, hsrc); 
     677        pjsip_msg_add_hdr(msg, h); 
     678        hsrc = hsrc->next; 
     679    } 
     680 
     681    /* Duplicate message body */ 
     682    if (src->msg->body) 
     683        msg->body = pjsip_msg_body_clone(dst->pool, src->msg->body); 
     684 
     685    dst->is_pending = src->is_pending; 
     686 
     687    PJ_LOG(5,(THIS_FILE, 
     688             "Tx data %s cloned", 
     689             pjsip_tx_data_get_info(dst))); 
     690 
     691    return PJ_SUCCESS; 
     692} 
    646693 
    647694PJ_DEF(char*) pjsip_rx_data_get_info(pjsip_rx_data *rdata) 
Note: See TracChangeset for help on using the changeset viewer.