Changeset 1817


Ignore:
Timestamp:
Feb 22, 2008 9:56:27 AM (12 years ago)
Author:
bennylp
Message:

Ticket #491: Crash in TCP/TLS transport when the listener is destroyed

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

Legend:

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

    r1602 r1817  
    104104    pjsip_transport          base; 
    105105    pj_bool_t                is_server; 
     106 
     107    /* Do not save listener instance in the transport, because 
     108     * listener might be destroyed during transport's lifetime. 
     109     * See http://trac.pjsip.org/repos/ticket/491 
    106110    struct tcp_listener     *listener; 
     111     */ 
     112 
    107113    pj_bool_t                is_registered; 
    108114    pj_bool_t                is_closing; 
     
    525531    tcp->sock = sock; 
    526532    tcp->is_server = is_server; 
    527     tcp->listener = listener; 
     533    /*tcp->listener = listener;*/ 
    528534    pj_list_init(&tcp->delayed_list); 
    529535    tcp->base.pool = pool; 
     
    674680    /* Stop keep-alive timer. */ 
    675681    if (tcp->ka_timer.id) { 
    676         pjsip_endpt_cancel_timer(tcp->listener->endpt, &tcp->ka_timer); 
     682        pjsip_endpt_cancel_timer(tcp->base.endpt, &tcp->ka_timer); 
    677683        tcp->ka_timer.id = PJ_FALSE; 
    678684    } 
     
    757763 
    758764    /* Init rdata */ 
    759     pool = pjsip_endpt_create_pool(tcp->listener->endpt, 
     765    pool = pjsip_endpt_create_pool(tcp->base.endpt, 
    760766                                   "rtd%p", 
    761767                                   PJSIP_POOL_RDATA_LEN, 
     
    11951201    /* Stop keep-alive timer. */ 
    11961202    if (tcp->ka_timer.id) { 
    1197         pjsip_endpt_cancel_timer(tcp->listener->endpt, &tcp->ka_timer); 
     1203        pjsip_endpt_cancel_timer(tcp->base.endpt, &tcp->ka_timer); 
    11981204        tcp->ka_timer.id = PJ_FALSE; 
    11991205    } 
     
    14351441    if (PJSIP_TCP_KEEP_ALIVE_INTERVAL) { 
    14361442        pj_time_val delay = { PJSIP_TCP_KEEP_ALIVE_INTERVAL, 0 }; 
    1437         pjsip_endpt_schedule_timer(tcp->listener->endpt, &tcp->ka_timer,  
     1443        pjsip_endpt_schedule_timer(tcp->base.endpt, &tcp->ka_timer,  
    14381444                                   &delay); 
    14391445        tcp->ka_timer.id = PJ_TRUE; 
     
    14631469        delay.msec = 0; 
    14641470 
    1465         pjsip_endpt_schedule_timer(tcp->listener->endpt, &tcp->ka_timer,  
     1471        pjsip_endpt_schedule_timer(tcp->base.endpt, &tcp->ka_timer,  
    14661472                                   &delay); 
    14671473        tcp->ka_timer.id = PJ_TRUE; 
     
    14901496    delay.msec = 0; 
    14911497 
    1492     pjsip_endpt_schedule_timer(tcp->listener->endpt, &tcp->ka_timer,  
     1498    pjsip_endpt_schedule_timer(tcp->base.endpt, &tcp->ka_timer,  
    14931499                               &delay); 
    14941500    tcp->ka_timer.id = PJ_TRUE; 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_tls_ossl.c

    r1799 r1817  
    156156    pjsip_transport          base; 
    157157    pj_bool_t                is_server; 
     158 
     159    /* Do not save listener instance in the transport, because 
     160     * listener might be destroyed during transport's lifetime. 
     161     * See http://trac.pjsip.org/repos/ticket/491 
    158162    struct tls_listener     *listener; 
     163     */ 
     164 
     165    /* TLS settings, copied from listener */ 
     166    struct { 
     167        pj_time_val          timeout; 
     168    } setting; 
     169 
    159170    pj_bool_t                is_registered; 
    160171    pj_bool_t                is_closing; 
     
    591602            PJ_TODO(SUPPORT_SSL_ASYNCHRONOUS_CONNECT); 
    592603 
    593             if (tls->listener->setting.timeout.sec == 0 && 
    594                 tls->listener->setting.timeout.msec == 0) 
     604            if (tls->setting.timeout.sec == 0 && 
     605                tls->setting.timeout.msec == 0) 
    595606            { 
    596607                p_timeout = NULL; 
    597608            } else { 
    598                 timeout = tls->listener->setting.timeout; 
     609                timeout = tls->setting.timeout; 
    599610                p_timeout = &timeout; 
    600611            } 
     
    723734            pj_assert(PJ_FD_COUNT(&rd_set) == 1 || PJ_FD_COUNT(&wr_set) == 1); 
    724735 
    725             if (tls->listener->setting.timeout.sec == 0 && 
    726                 tls->listener->setting.timeout.msec == 0) 
     736            if (tls->setting.timeout.sec == 0 && 
     737                tls->setting.timeout.msec == 0) 
    727738            { 
    728739                p_timeout = NULL; 
    729740            } else { 
    730                 timeout = tls->listener->setting.timeout; 
     741                timeout = tls->setting.timeout; 
    731742                p_timeout = &timeout; 
    732743            } 
     
    12171228    tls->sock = sock; 
    12181229    tls->is_server = is_server; 
    1219     tls->listener = listener; 
     1230    /*tls->listener = listener;*/ 
    12201231    pj_list_init(&tls->delayed_list); 
    12211232    tls->base.pool = pool; 
     1233    tls->setting.timeout = listener->setting.timeout; 
    12221234 
    12231235    pj_ansi_snprintf(tls->base.obj_name, PJ_MAX_OBJ_NAME,  
     
    14041416    /* Stop keep-alive timer. */ 
    14051417    if (tls->ka_timer.id) { 
    1406         pjsip_endpt_cancel_timer(tls->listener->endpt, &tls->ka_timer); 
     1418        pjsip_endpt_cancel_timer(tls->base.endpt, &tls->ka_timer); 
    14071419        tls->ka_timer.id = PJ_FALSE; 
    14081420    } 
     
    14921504 
    14931505    /* Init rdata */ 
    1494     pool = pjsip_endpt_create_pool(tls->listener->endpt, 
     1506    pool = pjsip_endpt_create_pool(tls->base.endpt, 
    14951507                                   "rtd%p", 
    14961508                                   PJSIP_POOL_RDATA_LEN, 
     
    19741986        /* Stop keep-alive timer. */ 
    19751987        if (tls->ka_timer.id) { 
    1976             pjsip_endpt_cancel_timer(tls->listener->endpt, &tls->ka_timer); 
     1988            pjsip_endpt_cancel_timer(tls->base.endpt, &tls->ka_timer); 
    19771989            tls->ka_timer.id = PJ_FALSE; 
    19781990        } 
     
    22782290    if (PJSIP_TLS_KEEP_ALIVE_INTERVAL) { 
    22792291        pj_time_val delay = { PJSIP_TLS_KEEP_ALIVE_INTERVAL, 0 }; 
    2280         pjsip_endpt_schedule_timer(tls->listener->endpt, &tls->ka_timer,  
     2292        pjsip_endpt_schedule_timer(tls->base.endpt, &tls->ka_timer,  
    22812293                                   &delay); 
    22822294        tls->ka_timer.id = PJ_TRUE; 
     
    23082320        delay.msec = 0; 
    23092321 
    2310         pjsip_endpt_schedule_timer(tls->listener->endpt, &tls->ka_timer,  
     2322        pjsip_endpt_schedule_timer(tls->base.endpt, &tls->ka_timer,  
    23112323                                   &delay); 
    23122324        tls->ka_timer.id = PJ_TRUE; 
     
    23342346    delay.msec = 0; 
    23352347 
    2336     pjsip_endpt_schedule_timer(tls->listener->endpt, &tls->ka_timer,  
     2348    pjsip_endpt_schedule_timer(tls->base.endpt, &tls->ka_timer,  
    23372349                               &delay); 
    23382350    tls->ka_timer.id = PJ_TRUE; 
Note: See TracChangeset for help on using the changeset viewer.