From 56bcb97a3cae238a2ff06db2ff2a46e3dd04599f Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Mon, 7 Mar 2016 18:56:05 -0600 Subject: chan_sip.c: Simplify sip_pvt destructor call levels. Remove destructor calling destroy_it calling really_destroy_it for no benefit. Just make the destructor the really_destroy_it function. Change-Id: Idea0d47b27dd74f2488db75bcc7f353d8fdc614a --- channels/chan_sip.c | 33 ++++++++------------------------- channels/sip/include/dialog.h | 13 ------------- 2 files changed, 8 insertions(+), 38 deletions(-) (limited to 'channels') diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e467b801d..f36bc3dc5 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -6371,11 +6371,14 @@ static void offered_media_list_destroy(struct sip_pvt *p) } } -/*! \brief Execute destruction of SIP dialog structure, release memory */ -void __sip_destroy(struct sip_pvt *p, int lockowner, int lockdialoglist) +/*! \brief ao2 destructor for SIP dialog structure */ +static void sip_pvt_dtor(void *vdoomed) { + struct sip_pvt *p = vdoomed; struct sip_request *req; + ast_debug(3, "Destroying SIP dialog %s\n", p->callid); + /* Destroy Session-Timers if allocated */ if (p->stimer) { p->stimer->quit_flag = 1; @@ -6394,14 +6397,12 @@ void __sip_destroy(struct sip_pvt *p, int lockowner, int lockdialoglist) /* Unlink us from the owner if we have one */ if (p->owner) { - if (lockowner) - ast_channel_lock(p->owner); + ast_channel_lock(p->owner); ast_debug(1, "Detaching from %s\n", ast_channel_name(p->owner)); ast_channel_tech_pvt_set(p->owner, NULL); /* Make sure that the channel knows its backend is going away */ ast_channel_softhangup_internal_flag_add(p->owner, AST_SOFTHANGUP_DEV); - if (lockowner) - ast_channel_unlock(p->owner); + ast_channel_unlock(p->owner); /* Give the channel a chance to react before deallocation */ usleep(1); } @@ -6711,24 +6712,6 @@ static int update_call_counter(struct sip_pvt *fup, int event) return 0; } - -static void sip_destroy_fn(void *p) -{ - sip_destroy(p); -} - -/*! \brief Destroy SIP call structure. - * Make it return NULL so the caller can do things like - * foo = sip_destroy(foo); - * and reduce the chance of bugs due to dangling pointers. - */ -struct sip_pvt *sip_destroy(struct sip_pvt *p) -{ - ast_debug(3, "Destroying SIP dialog %s\n", p->callid); - __sip_destroy(p, TRUE, TRUE); - return NULL; -} - /*! \brief Convert SIP hangup causes to Asterisk hangup causes */ int hangup_sip2cause(int cause) { @@ -8634,7 +8617,7 @@ struct sip_pvt *__sip_alloc(ast_string_field callid, struct ast_sockaddr *addr, { struct sip_pvt *p; - p = __ao2_alloc_debug(sizeof(*p), sip_destroy_fn, + p = __ao2_alloc_debug(sizeof(*p), sip_pvt_dtor, AO2_ALLOC_OPT_LOCK_MUTEX, "allocate a dialog(pvt) struct", file, line, func, 1); if (!p) { diff --git a/channels/sip/include/dialog.h b/channels/sip/include/dialog.h index 582841d54..c0dfd605a 100644 --- a/channels/sip/include/dialog.h +++ b/channels/sip/include/dialog.h @@ -43,19 +43,6 @@ void sip_scheddestroy_final(struct sip_pvt *p, int ms); void sip_scheddestroy(struct sip_pvt *p, int ms); int sip_cancel_destroy(struct sip_pvt *p); -/*! \brief Destroy SIP call structure. - * Make it return NULL so the caller can do things like - * foo = sip_destroy(foo); - * and reduce the chance of bugs due to dangling pointers. - */ -struct sip_pvt *sip_destroy(struct sip_pvt *p); - -/*! \brief Destroy SIP call structure. - * Make it return NULL so the caller can do things like - * foo = sip_destroy(foo); - * and reduce the chance of bugs due to dangling pointers. - */ -void __sip_destroy(struct sip_pvt *p, int lockowner, int lockdialoglist); /*! * \brief Unlink a dialog from the dialogs container, as well as any other places * that it may be currently stored. -- cgit v1.2.3