]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip.c: Simplify sip_pvt destructor call levels. 88/2388/1
authorRichard Mudgett <rmudgett@digium.com>
Tue, 8 Mar 2016 00:56:05 +0000 (18:56 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Mon, 14 Mar 2016 19:14:16 +0000 (14:14 -0500)
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
channels/sip/include/dialog.h

index b7e4c695b3f5644d1817727fe5c98e6f64a7af4f..6128b0f21a85d42d22c7b7563986785cd3d662a9 100644 (file)
@@ -6340,11 +6340,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;
@@ -6363,14 +6366,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);
        }
@@ -6683,24 +6684,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)
 {
@@ -8508,8 +8491,10 @@ struct sip_pvt *sip_alloc(ast_string_field callid, struct ast_sockaddr *addr,
 {
        struct sip_pvt *p;
 
-       if (!(p = ao2_t_alloc(sizeof(*p), sip_destroy_fn, "allocate a dialog(pvt) struct")))
+       p = ao2_t_alloc(sizeof(*p), sip_pvt_dtor, "allocate a dialog(pvt) struct");
+       if (!p) {
                return NULL;
+       }
 
        if (ast_string_field_init(p, 512)) {
                ao2_t_ref(p, -1, "failed to string_field_init, drop p");
index ea2fb457cc35784ef9c8151e27259339086a8cbf..724f6e6c2c791ffcbd644936fe77ac5c5eaf21a2 100644 (file)
@@ -40,19 +40,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.