Ignore:
Timestamp:
Dec 30, 2005 11:50:15 PM (18 years ago)
Author:
bennylp
Message:

Basic module, transport, and sending messages

File:
1 edited

Legend:

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

    r105 r106  
    4444    pjsip_endpoint  *endpt; 
    4545    pjsip_tpfactory  factory_list; 
     46#if defined(PJ_DEBUG) && PJ_DEBUG!=0 
     47    pj_atomic_t     *tdata_counter; 
     48#endif 
    4649    void           (*msg_cb)(pjsip_endpoint*, pj_status_t, pjsip_rx_data*); 
    4750}; 
     
    205208    pj_ioqueue_op_key_init(&tdata->op_key.key, sizeof(tdata->op_key)); 
    206209 
     210#if defined(PJ_DEBUG) && PJ_DEBUG!=0 
     211    pj_atomic_inc( tdata->mgr->tdata_counter ); 
     212#endif 
     213 
    207214    *p_tdata = tdata; 
    208215    return PJ_SUCCESS; 
     
    222229 * reaches zero. 
    223230 */ 
    224 PJ_DEF(void) pjsip_tx_data_dec_ref( pjsip_tx_data *tdata ) 
     231PJ_DEF(pj_status_t) pjsip_tx_data_dec_ref( pjsip_tx_data *tdata ) 
    225232{ 
    226233    pj_assert( pj_atomic_get(tdata->ref_cnt) > 0); 
    227234    if (pj_atomic_dec_and_get(tdata->ref_cnt) <= 0) { 
    228235        PJ_LOG(5,(tdata->obj_name, "destroying txdata")); 
     236#if defined(PJ_DEBUG) && PJ_DEBUG!=0 
     237        pj_atomic_dec( tdata->mgr->tdata_counter ); 
     238#endif 
    229239        pj_atomic_destroy( tdata->ref_cnt ); 
    230240        pj_lock_destroy( tdata->lock ); 
    231241        pjsip_endpt_destroy_pool( tdata->mgr->endpt, tdata->pool ); 
     242        return PJSIP_EBUFDESTROYED; 
     243    } else { 
     244        return PJ_SUCCESS; 
    232245    } 
    233246} 
     
    453466     * Unregister timer, if any. 
    454467     */ 
    455     pj_assert(tp->idle_timer.id == PJ_FALSE); 
     468    //pj_assert(tp->idle_timer.id == PJ_FALSE); 
    456469    if (tp->idle_timer.id != PJ_FALSE) { 
    457470        pjsip_endpt_cancel_timer(mgr->endpt, &tp->idle_timer); 
     
    567580        return status; 
    568581 
     582#if defined(PJ_DEBUG) && PJ_DEBUG!=0 
     583    status = pj_atomic_create(pool, 0, &mgr->tdata_counter); 
     584    if (status != PJ_SUCCESS) 
     585        return status; 
     586#endif 
     587 
    569588    *p_mgr = mgr; 
    570589    return PJ_SUCCESS; 
     
    582601     
    583602    PJ_LOG(5, (THIS_FILE, "pjsip_tpmgr_destroy()")); 
     603 
     604#if defined(PJ_DEBUG) && PJ_DEBUG!=0 
     605    pj_assert(pj_atomic_get(mgr->tdata_counter) == 0); 
     606#endif 
    584607 
    585608    pj_lock_acquire(mgr->lock); 
     
    601624 
    602625    pj_lock_release(mgr->lock); 
     626    pj_lock_destroy(mgr->lock); 
    603627 
    604628    return PJ_SUCCESS; 
     
    742766 
    743767/* 
    744  * pjsip_tpmgr_alloc_transport() 
     768 * pjsip_tpmgr_acquire_transport() 
    745769 * 
    746770 * Get transport suitable to communicate to remote. Create a new one 
    747771 * if necessary. 
    748772 */ 
    749 PJ_DEF(pj_status_t) pjsip_tpmgr_alloc_transport( pjsip_tpmgr *mgr, 
    750                                                  pjsip_transport_type_e type, 
    751                                                  const pj_sockaddr_t *remote, 
    752                                                  int addr_len, 
    753                                                  pjsip_transport **p_transport) 
     773PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport(pjsip_tpmgr *mgr, 
     774                                                  pjsip_transport_type_e type, 
     775                                                  const pj_sockaddr_t *remote, 
     776                                                  int addr_len, 
     777                                                  pjsip_transport **tp) 
    754778{ 
    755779    struct transport_key 
     
    799823        pjsip_transport_add_ref(transport); 
    800824        pj_lock_release(mgr->lock); 
    801         *p_transport = transport; 
     825        *tp = transport; 
    802826        return PJ_SUCCESS; 
    803827    } 
     
    822846    /* Request factory to create transport. */ 
    823847    status = factory->create_transport(factory, mgr, mgr->endpt, 
    824                                        remote, p_transport); 
    825  
     848                                       remote, addr_len, tp); 
     849    if (status == PJ_SUCCESS) { 
     850        PJ_ASSERT_ON_FAIL(tp!=NULL,  
     851            {pj_lock_release(mgr->lock); return PJ_EBUG;}); 
     852        pjsip_transport_add_ref(*tp); 
     853    } 
    826854    pj_lock_release(mgr->lock); 
    827855    return status; 
Note: See TracChangeset for help on using the changeset viewer.