summaryrefslogtreecommitdiff
path: root/main/file.c
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2017-12-29 19:24:02 -0500
committerCorey Farrell <git@cfware.com>2018-01-03 17:23:36 -0500
commit55f1d69c43d2c6c87eec50fd3eed7a77ba2e912b (patch)
tree0749060ca9d29dc796152f1654a340f091f4f600 /main/file.c
parent7f4facc5e4a96ccae10283da998044becc4fbe11 (diff)
loader: Create ast_module_running_ref.
This function returns NULL if the module in question is not running. I did not change ast_module_ref as most callers do not check the result and they always call ast_module_unref. Make use of this function when running registered items from: * app_stack API's * bridge technologies * CLI commands * File formats * Manager Actions * RTP engines * Sorcery Wizards * Timing Interfaces * Translators * AGI Commands * Fax Technologies ASTERISK-20346 #close Change-Id: Ia16fd28e188b2fc0b9d18b8a5d9cacc31df73fcc
Diffstat (limited to 'main/file.c')
-rw-r--r--main/file.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/main/file.c b/main/file.c
index 41131f9ee..8dded8123 100644
--- a/main/file.c
+++ b/main/file.c
@@ -425,11 +425,17 @@ static void filestream_destructor(void *arg)
static struct ast_filestream *get_filestream(struct ast_format_def *fmt, FILE *bfile)
{
struct ast_filestream *s;
-
int l = sizeof(*s) + fmt->buf_size + fmt->desc_size; /* total allocation size */
- if ( (s = ao2_alloc(l, filestream_destructor)) == NULL)
+
+ if (!ast_module_running_ref(fmt->module)) {
+ return NULL;
+ }
+
+ s = ao2_alloc(l, filestream_destructor);
+ if (!s) {
+ ast_module_unref(fmt->module);
return NULL;
- ast_module_ref(fmt->module);
+ }
s->fmt = fmt;
s->f = bfile;