Author: dlee
Date: Thu Aug  8 16:17:09 2013
New Revision: 396464

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=396464
Log:
Cleanup

Modified:
    team/dlee/ASTERISK-21969/res/res_stasis.c
    team/dlee/ASTERISK-21969/res/stasis/app.c

Modified: team/dlee/ASTERISK-21969/res/res_stasis.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/res/res_stasis.c?view=diff&rev=396464&r1=396463&r2=396464
==============================================================================
--- team/dlee/ASTERISK-21969/res/res_stasis.c (original)
+++ team/dlee/ASTERISK-21969/res/res_stasis.c Thu Aug  8 16:17:09 2013
@@ -435,6 +435,7 @@
                }
        }
 
+       app_unsubscribe_bridge(app, stasis_app_get_bridge(control));
        app_unsubscribe_channel(app, chan);
 
        res = send_end_msg(app, chan);

Modified: team/dlee/ASTERISK-21969/res/stasis/app.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/res/stasis/app.c?view=diff&rev=396464&r1=396463&r2=396464
==============================================================================
--- team/dlee/ASTERISK-21969/res/stasis/app.c (original)
+++ team/dlee/ASTERISK-21969/res/stasis/app.c Thu Aug  8 16:17:09 2013
@@ -52,6 +52,7 @@
        char name[];
 };
 
+/*! Subscription info for a particular channel/bridge. */
 struct app_forwards {
        /*! Count of number of times this channel/bridge has been subscribed */
        int interested;
@@ -101,6 +102,7 @@
        return forwards;
 }
 
+/*! Forward a channel's topics to an app */
 static struct app_forwards *forwards_create_channel(struct app *app,
        struct ast_channel *chan)
 {
@@ -134,6 +136,7 @@
        return forwards;
 }
 
+/*! Forward a bridge's topics to an app */
 static struct app_forwards *forwards_create_bridge(struct app *app,
        struct ast_bridge *bridge)
 {
@@ -214,6 +217,7 @@
        struct app *app = data;
        RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
 
+       /* By default, send any message that has a JSON representation */
        json = stasis_message_to_json(message);
        if (!json) {
                return;
@@ -271,7 +275,8 @@
        struct ast_channel_snapshot *new_snapshot,
        const struct timeval *tv)
 {
-       struct ast_channel_snapshot *snapshot = new_snapshot ? new_snapshot : 
old_snapshot;
+       struct ast_channel_snapshot *snapshot = new_snapshot ?
+               new_snapshot : old_snapshot;
 
        if (!old_snapshot) {
                return channel_created_event(snapshot, tv);
@@ -291,8 +296,8 @@
 {
        RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
 
-       /* No Newexten event on cache clear */
-       if (!new_snapshot) {
+       /* No Newexten event on cache clear or first event */
+       if (!old_snapshot || !new_snapshot) {
                return NULL;
        }
 
@@ -301,7 +306,7 @@
                return NULL;
        }
 
-       if (old_snapshot && ast_channel_snapshot_cep_equal(old_snapshot, 
new_snapshot)) {
+       if (ast_channel_snapshot_cep_equal(old_snapshot, new_snapshot)) {
                return NULL;
        }
 
@@ -350,15 +355,26 @@
                 struct stasis_message *message)
 {
        struct app *app = data;
-        struct stasis_cache_update *update = stasis_message_data(message);
-        struct ast_channel_snapshot *new_snapshot = 
stasis_message_data(update->new_snapshot);
-        struct ast_channel_snapshot *old_snapshot = 
stasis_message_data(update->old_snapshot);
+        struct stasis_cache_update *update;
+        struct ast_channel_snapshot *new_snapshot;
+        struct ast_channel_snapshot *old_snapshot;
+        const struct timeval *tv;
+        int i;
+
+       ast_assert(stasis_message_type(message) == stasis_cache_update_type());
+
+        update = stasis_message_data(message);
+
+       ast_assert(update->type == ast_bridge_snapshot_type());
+
+        new_snapshot = stasis_message_data(update->new_snapshot);
+        old_snapshot = stasis_message_data(update->old_snapshot);
+
         /* Pull timestamp from the new snapshot, or from the update message
          * when there isn't one. */
-        const struct timeval *tv = update->new_snapshot ?
+        tv = update->new_snapshot ?
                stasis_message_timestamp(update->new_snapshot) :
                stasis_message_timestamp(message);
-        int i;
 
         for (i = 0; i < ARRAY_LEN(channel_monitors); ++i) {
                 RAII_VAR(struct ast_json *, msg, NULL, ast_json_unref);
@@ -386,12 +402,12 @@
                 struct stasis_topic *topic,
                 struct stasis_message *message)
 {
+        RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
        struct app *app = data;
         struct stasis_cache_update *update;
         struct ast_bridge_snapshot *new_snapshot;
         struct ast_bridge_snapshot *old_snapshot;
         const struct timeval *tv;
-        RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
 
        ast_assert(stasis_message_type(message) == stasis_cache_update_type());
 
@@ -404,7 +420,6 @@
        tv = update->new_snapshot ?
                stasis_message_timestamp(update->new_snapshot) :
                stasis_message_timestamp(message);
-
 
         if (!new_snapshot) {
                 json = simple_bridge_event("BridgeDestroyed", old_snapshot, 
tv);
@@ -498,7 +513,6 @@
        if (res != 0) {
                return NULL;
        }
-
 
        strncpy(app->name, name, size - sizeof(*app));
        app->handler = handler;
@@ -580,7 +594,6 @@
                ast_verb(1, "Activating Stasis app '%s'\n", app->name);
        }
 
-
        app->handler = handler;
        ao2_cleanup(app->data);
        if (data) {
@@ -596,6 +609,8 @@
 
 int app_subscribe_channel(struct app *app, struct ast_channel *chan)
 {
+       int res;
+
        if (!app || !chan) {
                return -1;
        } else {
@@ -610,7 +625,12 @@
                        if (!forwards) {
                                return -1;
                        }
-                       ao2_link_flags(app->forwards, forwards, OBJ_NOLOCK);
+
+                       res = ao2_link_flags(app->forwards, forwards,
+                               OBJ_NOLOCK);
+                       if (res != 0) {
+                               return -1;
+                       }
                }
 
                ++forwards->interested;


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to