diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 6 | ||||
-rw-r--r-- | main/framehook.c | 10 |
2 files changed, 10 insertions, 6 deletions
diff --git a/main/channel.c b/main/channel.c index a7cca1cad..a5cb64112 100644 --- a/main/channel.c +++ b/main/channel.c @@ -2926,7 +2926,7 @@ static int generator_force(const void *data) int ast_activate_generator(struct ast_channel *chan, struct ast_generator *gen, void *params) { int res = 0; - void *generatordata; + void *generatordata = NULL; ast_channel_lock(chan); if (ast_channel_generatordata(chan)) { @@ -2937,10 +2937,12 @@ int ast_activate_generator(struct ast_channel *chan, struct ast_generator *gen, if (gen->alloc && !(generatordata = gen->alloc(chan, params))) { res = -1; } + if (generatordata) { + ast_channel_generator_set(chan, gen); + } if (!res) { ast_settimeout(chan, 50, generator_force, chan); ast_channel_generatordata_set(chan, generatordata); - ast_channel_generator_set(chan, gen); } ast_channel_unlock(chan); diff --git a/main/framehook.c b/main/framehook.c index 14f619866..67d55847a 100644 --- a/main/framehook.c +++ b/main/framehook.c @@ -104,12 +104,14 @@ int ast_framehook_attach(struct ast_channel *chan, struct ast_framehook_interfac framehook->chan = chan; /* create the framehook list if it didn't already exist */ - if (!ast_channel_framehooks(chan) && !(fh_list = ast_calloc(1, sizeof(*ast_channel_framehooks(chan))))) { - ast_free(framehook); - return -1; + if (!ast_channel_framehooks(chan)) { + if (!(fh_list = ast_calloc(1, sizeof(*ast_channel_framehooks(chan))))) { + ast_free(framehook); + return -1; + } + ast_channel_framehooks_set(chan, fh_list); } - ast_channel_framehooks_set(chan, fh_list); framehook->id = ++ast_channel_framehooks(chan)->id_count; AST_LIST_INSERT_TAIL(&ast_channel_framehooks(chan)->list, framehook, list); |