Dialplan functions: Fix some channel autoservice misuse.

* Fix off nominal paths leaving the channel in autoservice.
* Remove unnecessary start/stop channel autoservice.
* Fix channel locking around a channel datastore search.

Change-Id: I7ff2e42388064fe3149034ecae57604040b8b540
15.6
Richard Mudgett 7 years ago
parent c14ff9a4a6
commit 84fa1b9c36

@ -672,7 +672,11 @@ static int acf_curl_helper(struct ast_channel *chan, struct curl_args *args)
} }
AST_LIST_UNLOCK(&global_curl_info); AST_LIST_UNLOCK(&global_curl_info);
if (chan && (store = ast_channel_datastore_find(chan, &curl_info, NULL))) { if (chan) {
ast_channel_lock(chan);
store = ast_channel_datastore_find(chan, &curl_info, NULL);
ast_channel_unlock(chan);
if (store) {
list = store->data; list = store->data;
AST_LIST_LOCK(list); AST_LIST_LOCK(list);
AST_LIST_TRAVERSE(list, cur, list) { AST_LIST_TRAVERSE(list, cur, list) {
@ -683,6 +687,7 @@ static int acf_curl_helper(struct ast_channel *chan, struct curl_args *args)
} }
} }
} }
}
curl_easy_setopt(*curl, CURLOPT_URL, args->url); curl_easy_setopt(*curl, CURLOPT_URL, args->url);
curl_easy_setopt(*curl, CURLOPT_FILE, (void *) &args->cb_data); curl_easy_setopt(*curl, CURLOPT_FILE, (void *) &args->cb_data);

@ -225,6 +225,9 @@ static int function_realtime_read(struct ast_channel *chan, const char *cmd, cha
if (resultslen > len) { if (resultslen > len) {
ast_log(LOG_WARNING, "Failed to fetch. Realtime data is too large: need %zu, have %zu.\n", resultslen, len); ast_log(LOG_WARNING, "Failed to fetch. Realtime data is too large: need %zu, have %zu.\n", resultslen, len);
if (chan) {
ast_autoservice_stop(chan);
}
return -1; return -1;
} }
@ -458,6 +461,9 @@ static int function_realtime_readdestroy(struct ast_channel *chan, const char *c
* someones data without giving him the chance to look * someones data without giving him the chance to look
* at it. */ * at it. */
ast_log(LOG_WARNING, "Failed to fetch/destroy. Realtime data is too large: need %zu, have %zu.\n", resultslen, len); ast_log(LOG_WARNING, "Failed to fetch/destroy. Realtime data is too large: need %zu, have %zu.\n", resultslen, len);
if (chan) {
ast_autoservice_stop(chan);
}
return -1; return -1;
} }

@ -940,10 +940,6 @@ int ast_get_txt(struct ast_channel *chan, const char *number, char *txt, int txt
ast_debug(4, "ast_get_txt: Number = '%s', suffix = '%s'\n", number, suffix); ast_debug(4, "ast_get_txt: Number = '%s', suffix = '%s'\n", number, suffix);
if (chan && ast_autoservice_start(chan) < 0) {
return -1;
}
if (pos > 128) { if (pos > 128) {
pos = 128; pos = 128;
} }
@ -964,9 +960,6 @@ int ast_get_txt(struct ast_channel *chan, const char *number, char *txt, int txt
} else { } else {
ast_copy_string(txt, context.txt, txtlen); ast_copy_string(txt, context.txt, txtlen);
} }
if (chan) {
ret |= ast_autoservice_stop(chan);
}
return ret; return ret;
} }

Loading…
Cancel
Save