Author: mjordan
Date: Sun Apr  5 21:14:30 2015
New Revision: 434016

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=434016
Log:
Fix Mark's findings

Modified:
    team/mjordan/trunk-astdb-cluster/funcs/func_db.c
    team/mjordan/trunk-astdb-cluster/main/db.c
    team/mjordan/trunk-astdb-cluster/tests/test_db.c

Modified: team/mjordan/trunk-astdb-cluster/funcs/func_db.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mjordan/trunk-astdb-cluster/funcs/func_db.c?view=diff&rev=434016&r1=434015&r2=434016
==============================================================================
--- team/mjordan/trunk-astdb-cluster/funcs/func_db.c (original)
+++ team/mjordan/trunk-astdb-cluster/funcs/func_db.c Sun Apr  5 21:14:30 2015
@@ -450,27 +450,16 @@
 };
 
 static int function_db_shared_exists_read(struct ast_channel *chan,
-       const char *cmd, char *parse, char *buf, size_t len)
-{
-       AST_DECLARE_APP_ARGS(args,
-               AST_APP_ARG(family);
-       );
-
+       const char *cmd, char *args, char *buf, size_t len)
+{
        buf[0] = '\0';
 
-       if (ast_strlen_zero(parse)) {
+       if (ast_strlen_zero(args)) {
                ast_log(LOG_WARNING, "DB_SHARED_EXISTS requires an argument, 
DB_SHARED_EXISTS(<family>)\n");
                return -1;
        }
 
-       AST_STANDARD_APP_ARGS(args, parse);
-
-       if (args.argc != 1) {
-               ast_log(LOG_WARNING, "DB_SHARED_EXISTS requires an argument, 
DB_SHARED_EXISTS(<family>)\n");
-               return -1;
-       }
-
-       if (ast_db_is_shared(args.family)) {
+       if (ast_db_is_shared(args)) {
                ast_copy_string(buf, "1", len);
        } else {
                ast_copy_string(buf, "0", len);
@@ -494,6 +483,11 @@
                AST_APP_ARG(type);
        );
 
+       if (ast_strlen_zero(value)) {
+               ast_log(LOG_WARNING, "DB_SHARED requires a value, 
DB_SHARED(<action>[,<type>])=<family>\n");
+               return -1;
+       }
+
        if (ast_strlen_zero(parse)) {
                ast_log(LOG_WARNING, "DB_SHARED requires an argument, 
DB_SHARED(<action>[,<type>])=<family>\n");
                return -1;
@@ -501,18 +495,14 @@
 
        AST_STANDARD_APP_ARGS(args, parse);
 
-       if (args.argc < 1) {
-               ast_log(LOG_WARNING, "DB_SHARED requires an argument, 
DB_SHARED(<action>[,<type>])=<family>\n");
-               return -1;
-       }
-
-       if (ast_strlen_zero(value)) {
-               ast_log(LOG_WARNING, "DB_SHARED requires a value, 
DB_SHARED(<action>[,<type>])=<family>\n");
-               return -1;
-       }
-
        if (!strcasecmp(args.action, "put")) {
-               if (ast_strlen_zero(args.type) || !strcasecmp(args.type, 
"global")) {
+
+               if (ast_strlen_zero(args.type)) {
+                       ast_log(LOG_WARNING, "DB_SHARED: No 'type' 
provided.\n");
+                       return -1;
+               }
+
+               if (!strcasecmp(args.type, "global")) {
                        share_type = DB_SHARE_TYPE_GLOBAL;
                } else if (!strcasecmp(args.type, "unique")) {
                        share_type = DB_SHARE_TYPE_UNIQUE;

Modified: team/mjordan/trunk-astdb-cluster/main/db.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mjordan/trunk-astdb-cluster/main/db.c?view=diff&rev=434016&r1=434015&r2=434016
==============================================================================
--- team/mjordan/trunk-astdb-cluster/main/db.c (original)
+++ team/mjordan/trunk-astdb-cluster/main/db.c Sun Apr  5 21:14:30 2015
@@ -258,11 +258,7 @@
  */
 static struct ast_db_shared_family *db_shared_family_clone(const struct 
ast_db_shared_family *shared_family)
 {
-       struct ast_db_shared_family *clone;
-
-       clone = ast_db_shared_family_alloc(shared_family->name, 
shared_family->share_type);
-
-       return clone;
+       return ast_db_shared_family_alloc(shared_family->name, 
shared_family->share_type);
 }
 
 /*! \internal
@@ -427,13 +423,12 @@
        }
 
        ao2_link_flags(shared_families, shared_family, OBJ_NOLOCK);
+       ao2_unlock(shared_families);
 
        db_put_common(SHARED_FAMILY, shared_family->name,
                share_type == DB_SHARE_TYPE_UNIQUE ? "UNIQUE" : "GLOBAL", 0);
 
        ao2_ref(shared_family, -1);
-
-       ao2_unlock(shared_families);
 
        return 0;
 }
@@ -559,13 +554,14 @@
        shared_family = ao2_find(shared_families, family, OBJ_SEARCH_KEY | 
OBJ_NOLOCK);
        if (shared_family) {
                ao2_unlink_flags(shared_families, shared_family, OBJ_NOLOCK);
+               ao2_unlock(shared_families);
+
                db_del_common(SHARED_FAMILY, shared_family->name, 0);
                ao2_ref(shared_family, -1);
        } else {
+               ao2_unlock(shared_families);
                res = -1;
        }
-
-       ao2_unlock(shared_families);
 
        return res;
 }
@@ -1429,7 +1425,6 @@
                        ao2_ref(shared_family, -1);
                        continue;
                }
-
                ast_db_publish_shared_message(ast_db_put_shared_type(), clone, 
NULL);
 
                ao2_ref(clone, -1);
@@ -1641,10 +1636,11 @@
                const char *family;
 
                /* Find the 'key', which is the name of the shared family */
-               family = strchr(cur->key + 1, '/') + 1;
+               family = strchr(cur->key + 1, '/');
                if (!family) {
                        continue;
                }
+               family++;
 
                if (!strcasecmp(cur->data, "unique")) {
                        share_type = DB_SHARE_TYPE_UNIQUE;

Modified: team/mjordan/trunk-astdb-cluster/tests/test_db.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mjordan/trunk-astdb-cluster/tests/test_db.c?view=diff&rev=434016&r1=434015&r2=434016
==============================================================================
--- team/mjordan/trunk-astdb-cluster/tests/test_db.c (original)
+++ team/mjordan/trunk-astdb-cluster/tests/test_db.c Sun Apr  5 21:14:30 2015
@@ -137,7 +137,7 @@
                if (r == ETIMEDOUT) {
                        break;
                }
-               ast_assert(r == 0); /* Not expecting any othet types of errors 
*/
+               ast_assert(r == 0); /* Not expecting any other types of errors 
*/
        }
        return consumer->messages_rxed_len;
 }
@@ -390,7 +390,7 @@
  * As annoying as it is, it's actually really hard to synchronize on when the
  * AstDB updates itself from the received publication of a shared family value.
  * This is because while we can synchronize on the delivery to a topic, we 
can't
- * synchronize that the AstDB handler's for that topic has written the value 
out.
+ * synchronize that the AstDB handlers for that topic have written the value 
out.
  * Hence, we use this loop - if we don't get a value written within 1000 usec,
  * something is definitely wrong and we should just fail the unit test.
  */
@@ -410,6 +410,8 @@
 
 AST_TEST_DEFINE(test_ast_db_put_shared_create)
 {
+       RAII_VAR(const char *, global_family, GLOBAL_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, unique_family, UNIQUE_SHARED_FAMILY, 
ast_db_del_shared);
        int res;
 
        switch (cmd) {
@@ -442,14 +444,13 @@
        res = ast_db_put_shared(UNIQUE_SHARED_FAMILY, DB_SHARE_TYPE_GLOBAL);
        ast_test_validate(test, res != 0, "Creating duplicate global of unique 
shared area");
 
-       ast_db_del_shared(GLOBAL_SHARED_FAMILY);
-       ast_db_del_shared(UNIQUE_SHARED_FAMILY);
-
        return AST_TEST_PASS;
 }
 
 AST_TEST_DEFINE(test_ast_db_put_shared_delete)
 {
+       RAII_VAR(const char *, global_family, GLOBAL_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, unique_family, UNIQUE_SHARED_FAMILY, 
ast_db_del_shared);
        int res;
 
        switch (cmd) {
@@ -485,8 +486,15 @@
        return AST_TEST_PASS;
 }
 
+static void tree_cleanup(const char *name)
+{
+       ast_db_deltree(name, "");
+}
+
 AST_TEST_DEFINE(test_ast_db_put_shared_unique)
 {
+       RAII_VAR(const char *, unique_family, UNIQUE_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, tree_family, UNIQUE_SHARED_FAMILY, tree_cleanup);
        RAII_VAR(struct consumer *, consumer, NULL, ao2_cleanup);
        RAII_VAR(struct stasis_subscription *, uut, NULL, stasis_unsubscribe);
        int res;
@@ -534,14 +542,13 @@
        ast_test_validate(test, stasis_message_type(consumer->messages_rxed[0]) 
== ast_db_put_shared_type());
        ast_test_validate(test, stasis_message_type(consumer->messages_rxed[1]) 
== ast_db_put_shared_type());
 
-       ast_db_del_shared(UNIQUE_SHARED_FAMILY);
-       ast_db_deltree(UNIQUE_SHARED_FAMILY, "");
-
        return AST_TEST_PASS;
 }
 
 AST_TEST_DEFINE(test_ast_db_put_shared_global)
 {
+       RAII_VAR(const char *, global_family, GLOBAL_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, tree_family, GLOBAL_SHARED_FAMILY, tree_cleanup);
        RAII_VAR(struct consumer *, consumer, NULL, ao2_cleanup);
        RAII_VAR(struct stasis_subscription *, uut, NULL, stasis_unsubscribe);
        int res;
@@ -589,17 +596,17 @@
        ast_test_validate(test, stasis_message_type(consumer->messages_rxed[0]) 
== ast_db_put_shared_type());
        ast_test_validate(test, stasis_message_type(consumer->messages_rxed[1]) 
== ast_db_put_shared_type());
 
-       ast_db_deltree(GLOBAL_SHARED_FAMILY, "");
-       ast_db_del_shared(GLOBAL_SHARED_FAMILY);
-
        return AST_TEST_PASS;
 }
 
 AST_TEST_DEFINE(test_ast_db_put_shared_unique_update)
 {
+       RAII_VAR(const char *, unique_family, UNIQUE_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, tree_family, "astdbtest_unique", tree_cleanup);
+       RAII_VAR(const char *, eid_tree_family, TEST_EID, tree_cleanup);
        RAII_VAR(struct ast_db_shared_family *, shared_family, NULL, 
ao2_cleanup);
+       RAII_VAR(char *, value, NULL, ast_free);
        char eid_family[256];
-       char *value = NULL;
        struct ast_eid eid;
        int res;
 
@@ -634,6 +641,7 @@
        TEST_FOR_VALUE(eid_family, "foo", value);
        ast_test_validate(test, strcmp(value, "bar") == 0);
        ast_free(value);
+       value = NULL;
 
        res = ast_db_del_shared(UNIQUE_SHARED_FAMILY);
        ast_test_validate(test, res == 0, "Removal of unique shared area");
@@ -652,18 +660,17 @@
        /* Make sure we didn't update the value */
        TEST_FOR_VALUE(eid_family, "foo", value);
        ast_test_validate(test, strcmp(value, "bar") == 0);
-       ast_free(value);
-
-       ast_db_deltree("astdbtest_unique", "");
-       ast_db_deltree(TEST_EID, "");
+
        return AST_TEST_PASS;
 }
 
 AST_TEST_DEFINE(test_ast_db_put_shared_global_update)
 {
+       RAII_VAR(const char *, global_family, GLOBAL_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, tree_family, GLOBAL_SHARED_FAMILY, tree_cleanup);
        RAII_VAR(struct ast_db_shared_family *, shared_family, NULL, 
ao2_cleanup);
+       RAII_VAR(char *, value, NULL, ast_free);
        struct ast_eid eid;
-       char *value = NULL;
        int res;
 
        switch (cmd) {
@@ -696,6 +703,7 @@
        TEST_FOR_VALUE(GLOBAL_SHARED_FAMILY, "foo", value);
        ast_test_validate(test, strcmp(value, "bar") == 0);
        ast_free(value);
+       value = NULL;
 
        res = ast_db_del_shared(GLOBAL_SHARED_FAMILY);
        ast_test_validate(test, res == 0, "Removal of global shared area");
@@ -714,9 +722,6 @@
        /* Make sure we didn't update the value */
        TEST_FOR_VALUE(GLOBAL_SHARED_FAMILY, "foo", value);
        ast_test_validate(test, strcmp(value, "bar") == 0);
-       ast_free(value);
-
-       ast_db_deltree(GLOBAL_SHARED_FAMILY, "");
 
        return AST_TEST_PASS;
 }
@@ -725,6 +730,10 @@
 {
        RAII_VAR(struct consumer *, consumer, NULL, ao2_cleanup);
        RAII_VAR(struct stasis_subscription *, uut, NULL, stasis_unsubscribe);
+       RAII_VAR(const char *, global_family, GLOBAL_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, global_tree_family, GLOBAL_SHARED_FAMILY, 
tree_cleanup);
+       RAII_VAR(const char *, unique_family, UNIQUE_SHARED_FAMILY, 
ast_db_del_shared);
+       RAII_VAR(const char *, unique_tree_family, UNIQUE_SHARED_FAMILY, 
tree_cleanup);
        int res;
        int actual_len;
 
@@ -767,11 +776,6 @@
 
        ast_test_validate(test, stasis_message_type(consumer->messages_rxed[0]) 
== ast_db_put_shared_type());
        ast_test_validate(test, stasis_message_type(consumer->messages_rxed[1]) 
== ast_db_put_shared_type());
-
-       ast_db_del_shared(UNIQUE_SHARED_FAMILY);
-       ast_db_del_shared(GLOBAL_SHARED_FAMILY);
-       ast_db_deltree(UNIQUE_SHARED_FAMILY, "");
-       ast_db_deltree(GLOBAL_SHARED_FAMILY, "");
 
        return AST_TEST_PASS;
 }


-- 
_____________________________________________________________________
-- 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