diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-03-03 21:43:09 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-03-03 21:43:09 +0000 |
commit | 536b36e8ef7380b46a9acc11eacae5f214ca560a (patch) | |
tree | 0ddcd1575a634a41f0e26e4c4a9504e7ebf57943 | |
parent | e8534e715d1bc4d68a54cd0535ebe9ba1b755de3 (diff) |
Fix a memory leak when updating a realtime member field.
This was discovered while looking at issue #14353
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@179971 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | apps/app_queue.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index 70704f02b..24fe45afa 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1634,20 +1634,26 @@ static struct call_queue *load_realtime_queue(const char *queuename) static int update_realtime_member_field(struct member *mem, const char *queue_name, const char *field, const char *value) { - struct ast_variable *var; + struct ast_variable *var, *origvar; int ret = -1; - if (!(var = ast_load_realtime("queue_members", "interface", mem->interface, "queue_name", queue_name, NULL))) + if (!(var = ast_load_realtime("queue_members", "interface", mem->interface, "queue_name", queue_name, NULL))) { return ret; + } + + origvar = var; while (var) { - if (!strcmp(var->name, "uniqueid")) + if (!strcmp(var->name, "uniqueid")) { break; + } var = var->next; } if (var && !ast_strlen_zero(var->value)) { - if ((ast_update_realtime("queue_members", "uniqueid", var->value, field, value, NULL)) > -1) + if ((ast_update_realtime("queue_members", "uniqueid", var->value, field, value, NULL)) > -1) { ret = 0; + } } + ast_variables_destroy(origvar); return ret; } |