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-ua/sip_100rel.c

    r5250 r5851  
    635635 
    636636 
    637 /* Clone response. */ 
    638 static pjsip_tx_data *clone_tdata(dlg_data *dd, 
    639                                   const pjsip_tx_data *src) 
    640 { 
    641     pjsip_tx_data *dst; 
    642     const pjsip_hdr *hsrc; 
    643     pjsip_msg *msg; 
    644     pj_status_t status; 
    645  
    646     status = pjsip_endpt_create_tdata(dd->inv->dlg->endpt, &dst); 
    647     if (status != PJ_SUCCESS) 
    648         return NULL; 
    649  
    650     msg = pjsip_msg_create(dst->pool, PJSIP_RESPONSE_MSG); 
    651     dst->msg = msg; 
    652     pjsip_tx_data_add_ref(dst); 
    653  
    654     /* Duplicate status line */ 
    655     msg->line.status.code = src->msg->line.status.code; 
    656     pj_strdup(dst->pool, &msg->line.status.reason,  
    657               &src->msg->line.status.reason); 
    658  
    659     /* Duplicate all headers */ 
    660     hsrc = src->msg->hdr.next; 
    661     while (hsrc != &src->msg->hdr) { 
    662         pjsip_hdr *h = (pjsip_hdr*) pjsip_hdr_clone(dst->pool, hsrc); 
    663         pjsip_msg_add_hdr(msg, h); 
    664         hsrc = hsrc->next; 
    665     } 
    666  
    667     /* Duplicate message body */ 
    668     if (src->msg->body) 
    669         msg->body = pjsip_msg_body_clone(dst->pool, src->msg->body); 
    670  
    671     PJ_LOG(5,(dd->inv->dlg->obj_name, 
    672              "Reliable response %s created", 
    673              pjsip_tx_data_get_info(dst))); 
    674  
    675     return dst; 
    676 } 
    677  
    678637 
    679638/* Check if any pending response in transmission list has SDP */ 
     
    726685     */ 
    727686    old_tdata = tdata; 
    728     tdata = clone_tdata(dd, old_tdata); 
     687    pjsip_tx_data_clone(old_tdata, 0, &tdata); 
    729688    pjsip_tx_data_dec_ref(old_tdata); 
    730689     
Note: See TracChangeset for help on using the changeset viewer.