Ignore:
Timestamp:
Feb 27, 2013 11:57:43 AM (12 years ago)
Author:
ming
Message:

Re #1583: Backported to 1.x

Location:
pjproject/branches/1.x
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/1.x

  • pjproject/branches/1.x/pjsip/src/pjsip/sip_transport_tcp.c

    r3553 r4393  
    7474    PJ_DECL_LIST_MEMBER(struct delayed_tdata); 
    7575    pjsip_tx_data_op_key    *tdata_op_key; 
     76    pj_time_val              timeout; 
    7677}; 
    7778 
     
    650651static void tcp_flush_pending_tx(struct tcp_transport *tcp) 
    651652{ 
     653    pj_time_val now; 
     654 
     655    pj_gettickcount(&now); 
    652656    pj_lock_acquire(tcp->base.lock); 
    653657    while (!pj_list_empty(&tcp->delayed_list)) { 
     
    663667        tdata = pending_tx->tdata_op_key->tdata; 
    664668        op_key = (pj_ioqueue_op_key_t*)pending_tx->tdata_op_key; 
     669 
     670        if (pending_tx->timeout.sec > 0 && 
     671            PJ_TIME_VAL_GT(now, pending_tx->timeout)) 
     672        { 
     673            continue; 
     674        } 
    665675 
    666676        /* send! */ 
     
    11231133             * connect() is still in progress. Put the transmit data to 
    11241134             * the delayed list. 
     1135             * Starting from #1583 (https://trac.pjsip.org/repos/ticket/1583), 
     1136             * we also add timeout value for the transmit data. When the 
     1137             * connect() is completed, the timeout value will be checked to 
     1138             * determine whether the transmit data needs to be sent. 
    11251139             */ 
    1126             delayed_tdata = PJ_POOL_ALLOC_T(tdata->pool,  
    1127                                             struct delayed_tdata); 
     1140            delayed_tdata = PJ_POOL_ZALLOC_T(tdata->pool,  
     1141                                             struct delayed_tdata); 
    11281142            delayed_tdata->tdata_op_key = &tdata->op_key; 
     1143            if (tdata->msg && tdata->msg->type == PJSIP_REQUEST_MSG) { 
     1144                pj_gettickcount(&delayed_tdata->timeout); 
     1145                delayed_tdata->timeout.msec += pjsip_cfg()->tsx.td; 
     1146                pj_time_val_normalize(&delayed_tdata->timeout); 
     1147            } 
    11291148 
    11301149            pj_list_push_back(&tcp->delayed_list, delayed_tdata); 
  • pjproject/branches/1.x/pjsip/src/pjsip/sip_transport_tls.c

    r4376 r4393  
    7272    PJ_DECL_LIST_MEMBER(struct delayed_tdata); 
    7373    pjsip_tx_data_op_key    *tdata_op_key; 
     74    pj_time_val              timeout; 
    7475}; 
    7576 
     
    648649static void tls_flush_pending_tx(struct tls_transport *tls) 
    649650{ 
     651    pj_time_val now; 
     652 
     653    pj_gettickcount(&now); 
    650654    pj_lock_acquire(tls->base.lock); 
    651655    while (!pj_list_empty(&tls->delayed_list)) { 
     
    661665        tdata = pending_tx->tdata_op_key->tdata; 
    662666        op_key = (pj_ioqueue_op_key_t*)pending_tx->tdata_op_key; 
     667 
     668        if (pending_tx->timeout.sec > 0 && 
     669            PJ_TIME_VAL_GT(now, pending_tx->timeout)) 
     670        { 
     671            continue; 
     672        } 
    663673 
    664674        /* send! */ 
     
    12181228             * connect() is still in progress. Put the transmit data to 
    12191229             * the delayed list. 
     1230             * Starting from #1583 (https://trac.pjsip.org/repos/ticket/1583), 
     1231             * we also add timeout value for the transmit data. When the 
     1232             * connect() is completed, the timeout value will be checked to 
     1233             * determine whether the transmit data needs to be sent. 
    12201234             */ 
    1221             delayed_tdata = PJ_POOL_ALLOC_T(tdata->pool,  
    1222                                             struct delayed_tdata); 
     1235            delayed_tdata = PJ_POOL_ZALLOC_T(tdata->pool,  
     1236                                             struct delayed_tdata); 
    12231237            delayed_tdata->tdata_op_key = &tdata->op_key; 
     1238            if (tdata->msg && tdata->msg->type == PJSIP_REQUEST_MSG) { 
     1239                pj_gettickcount(&delayed_tdata->timeout); 
     1240                delayed_tdata->timeout.msec += pjsip_cfg()->tsx.td; 
     1241                pj_time_val_normalize(&delayed_tdata->timeout); 
     1242            } 
    12241243 
    12251244            pj_list_push_back(&tls->delayed_list, delayed_tdata); 
Note: See TracChangeset for help on using the changeset viewer.