Changeset 5373


Ignore:
Timestamp:
Jun 30, 2016 8:23:08 AM (3 years ago)
Author:
ming
Message:

Fixed #1929: Fixed memory leak when using sip_auth_client since it's also used by other components, such as sip_dialog, publishc, and pjsua_im.

Application should use the new API pjsip_auth_clt_deinit() to release the pool.

Location:
pjproject/trunk/pjsip
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsip/sip_auth.h

    r5336 r5373  
    343343 
    344344/** 
     345 * Deinitialize client authentication session data structure. 
     346 * 
     347 * @param sess          The client authentication session. 
     348 * 
     349 * @return              PJ_SUCCESS on success. 
     350 */ 
     351PJ_DECL(pj_status_t) pjsip_auth_clt_deinit( pjsip_auth_clt_sess *sess); 
     352 
     353 
     354/** 
    345355 * Clone client initialization session.  
    346356 * 
  • pjproject/trunk/pjsip/src/pjsip-simple/publishc.c

    r5170 r5373  
    223223        if (pubc->mutex) 
    224224            pj_mutex_destroy(pubc->mutex); 
     225 
     226        pjsip_auth_clt_deinit(&pubc->auth_sess); 
    225227        pjsip_endpt_release_pool(pubc->endpt, pubc->pool); 
    226228    } 
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_reg.c

    r5356 r5373  
    177177        pj_lock_release(regc->lock); 
    178178    } else { 
    179         pjsip_cached_auth *auth = NULL; 
    180179        pjsip_tpselector_dec_ref(&regc->tp_sel); 
    181180        if (regc->last_transport) { 
     
    192191        regc->lock = NULL; 
    193192 
    194         auth = regc->auth_sess.cached_auth.next; 
    195         while (auth != &regc->auth_sess.cached_auth) { 
    196             pjsip_endpt_release_pool(regc->endpt, auth->pool); 
    197             auth = auth->next; 
    198         } 
    199  
     193        pjsip_auth_clt_deinit(&regc->auth_sess); 
    200194        pjsip_endpt_release_pool(regc->endpt, regc->pool); 
    201195    } 
  • pjproject/trunk/pjsip/src/pjsip/sip_auth_client.c

    r5336 r5373  
    500500 
    501501 
     502/* Deinit client session. */ 
     503PJ_DEF(pj_status_t) pjsip_auth_clt_deinit(pjsip_auth_clt_sess *sess) 
     504{ 
     505    pjsip_cached_auth *auth; 
     506     
     507    PJ_ASSERT_RETURN(sess && sess->endpt, PJ_EINVAL); 
     508     
     509    auth = sess->cached_auth.next; 
     510    while (auth != &sess->cached_auth) { 
     511        pjsip_endpt_release_pool(sess->endpt, auth->pool); 
     512        auth = auth->next; 
     513    } 
     514 
     515    return PJ_SUCCESS; 
     516} 
     517 
     518 
    502519/* Clone session. */ 
    503520PJ_DEF(pj_status_t) pjsip_auth_clt_clone( pj_pool_t *pool, 
     
    965982                                       pjsip_cached_auth *auth ) 
    966983{ 
    967     pj_pool_t *auth_pool = pjsip_endpt_create_pool(endpt, "regc_auth%p", 1024,  
     984    pj_pool_t *auth_pool = pjsip_endpt_create_pool(endpt, "auth_cli%p", 1024,  
    968985                                                   1024); 
    969986 
     
    11641181            cached_auth = PJ_POOL_ZALLOC_T(sess->pool, pjsip_cached_auth); 
    11651182            cached_auth->pool = pjsip_endpt_create_pool(sess->endpt, 
    1166                                                         "regc_auth%p", 
     1183                                                        "auth_cli%p", 
    11671184                                                        1024, 
    11681185                                                        1024); 
  • pjproject/trunk/pjsip/src/pjsip/sip_dialog.c

    r5316 r5373  
    120120        pj_bzero(&dlg->tp_sel, sizeof(pjsip_tpselector)); 
    121121    } 
     122    pjsip_auth_clt_deinit(&dlg->auth_sess); 
    122123    pjsip_endpt_release_pool(dlg->endpt, dlg->pool); 
    123124} 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_im.c

    r4890 r5373  
    388388                if (status == PJ_SUCCESS) { 
    389389                    /* Done */ 
     390                    pjsip_auth_clt_deinit(&auth); 
    390391                    return; 
    391392                } 
     393                pjsip_auth_clt_deinit(&auth); 
    392394            } 
    393395        } 
     
    490492                if (status == PJ_SUCCESS) { 
    491493                    /* Done */ 
     494                    pjsip_auth_clt_deinit(&auth); 
    492495                    return; 
    493496                } 
     497                pjsip_auth_clt_deinit(&auth); 
    494498            } 
    495499        } 
Note: See TracChangeset for help on using the changeset viewer.