res_config_pgsql: Release table locks where appropriate
authorSean Bright <sean.bright@gmail.com>
Tue, 28 Feb 2017 15:41:45 +0000 (10:41 -0500)
committerSean Bright <sean.bright@gmail.com>
Tue, 28 Feb 2017 15:44:09 +0000 (09:44 -0600)
The find_table() functions NULL or a locked table pointer. We are
not consistently calling release_table() in failure paths.

Change-Id: I6f665b455799c84b036e5b34904b82b05eab9544

res/res_config_pgsql.c

index 93126c6..2d37c6b 100644 (file)
@@ -733,6 +733,7 @@ static int update_pgsql(const char *database, const char *tablename, const char
        ast_mutex_lock(&pgsql_lock);
        if (!pgsql_reconnect(database)) {
                ast_mutex_unlock(&pgsql_lock);
+               release_table(table);
                return -1;
        }
 
@@ -878,6 +879,7 @@ static int update2_pgsql(const char *database, const char *tablename, const stru
        ast_mutex_lock(&pgsql_lock);
        if (!pgsql_reconnect(database)) {
                ast_mutex_unlock(&pgsql_lock);
+               release_table(table);
                return -1;
        }
 
@@ -1322,6 +1324,7 @@ static int require_pgsql(const char *database, const char *tablename, va_list ap
 
                                if (pgsql_exec(database, tablename, ast_str_buffer(sql), &result) != 0) {
                                        ast_mutex_unlock(&pgsql_lock);
+                                       release_table(table);
                                        return -1;
                                }