Changeset 550 for pjproject/trunk/pjsip/src/pjsip/sip_transport.c
- Timestamp:
- Jun 23, 2006 3:04:54 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsip/sip_transport.c
r491 r550 517 517 518 518 entry->id = PJ_FALSE; 519 pjsip_transport_ unregister(tp->tpmgr,tp);519 pjsip_transport_destroy(tp); 520 520 } 521 521 … … 555 555 /* Verify again. */ 556 556 if (pj_atomic_get(tp->ref_cnt) == 0) { 557 pj_time_val delay = { PJSIP_TRANSPORT_IDLE_TIME, 0 }; 557 pj_time_val delay; 558 559 /* If transport is in graceful shutdown, then this is the 560 * last user who uses the transport. Schedule to destroy the 561 * transport immediately. Otherwise schedule idle timer. 562 */ 563 if (tp->is_shutdown) { 564 delay.sec = delay.msec = 0; 565 } else { 566 delay.sec = PJSIP_TRANSPORT_IDLE_TIME; 567 delay.msec = 0; 568 } 558 569 559 570 pj_assert(tp->idle_timer.id == 0); … … 624 635 } 625 636 637 638 /* 639 * Start graceful shutdown procedure for this transport. 640 */ 641 PJ_DEF(pj_status_t) pjsip_transport_shutdown(pjsip_transport *tp) 642 { 643 pjsip_tpmgr *mgr; 644 pj_status_t status; 645 646 pj_lock_acquire(tp->lock); 647 648 mgr = tp->tpmgr; 649 pj_lock_acquire(mgr->lock); 650 651 /* Do nothing if transport is being shutdown already */ 652 if (tp->is_shutdown) { 653 pj_lock_release(tp->lock); 654 pj_lock_release(mgr->lock); 655 return PJ_SUCCESS; 656 } 657 658 status = PJ_SUCCESS; 659 660 /* Instruct transport to shutdown itself */ 661 if (tp->do_shutdown) 662 status = tp->do_shutdown(tp); 663 664 if (status == PJ_SUCCESS) 665 tp->is_shutdown = PJ_TRUE; 666 667 pj_lock_release(tp->lock); 668 pj_lock_release(mgr->lock); 669 670 return status; 671 } 672 673 626 674 /** 627 675 * Unregister transport. 628 676 */ 629 PJ_DEF(pj_status_t) pjsip_transport_unregister( pjsip_tpmgr *mgr, 630 pjsip_transport *tp) 677 PJ_DEF(pj_status_t) pjsip_transport_destroy( pjsip_transport *tp) 631 678 { 632 679 /* Must have no user. */ … … 634 681 635 682 /* Destroy. */ 636 return destroy_transport( mgr, tp);683 return destroy_transport(tp->tpmgr, tp); 637 684 } 638 685 … … 1030 1077 } 1031 1078 1032 if (transport != NULL) {1079 if (transport!=NULL && !transport->is_shutdown) { 1033 1080 /* 1034 1081 * Transport found!
Note: See TracChangeset
for help on using the changeset viewer.