]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
fastagi: record file closed after sending result 21/1721/1
authorKevin Harwell <kharwell@digium.com>
Wed, 25 Nov 2015 21:26:35 +0000 (15:26 -0600)
committerKevin Harwell <kharwell@digium.com>
Wed, 25 Nov 2015 21:33:38 +0000 (15:33 -0600)
The fastagi record-file testsuite test sometimes fails reporting an empty
recorded file. This was happening because Asterisk was sending the agi result
notification prior to actually closing the file and the data, being buffered,
had not been written to the file yet when the test attempts to check the file
size.

This patch makes it so the record file stream is closed prior to sending the
agi result notification.

ASTERISK-25593 #close

Change-Id: I6b2b3be3ae37f7c7b18e672c419a89b3b8513cde

res/res_agi.c

index 770aaaac50d492ab9bb20570073267f458ff0a6d..79002255f5a974b60139c35f5dea5bf54a493c08 100644 (file)
@@ -2407,8 +2407,8 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const
                        }
                        f = ast_read(chan);
                        if (!f) {
-                               ast_agi_send(agi->fd, chan, "200 result=%d (hangup) endpos=%ld\n", -1, sample_offset);
                                ast_closestream(fs);
+                               ast_agi_send(agi->fd, chan, "200 result=%d (hangup) endpos=%ld\n", -1, sample_offset);
                                if (sildet)
                                        ast_dsp_free(sildet);
                                return RESULT_FAILURE;
@@ -2422,8 +2422,8 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const
                                        ast_stream_rewind(fs, 200);
                                        ast_truncstream(fs);
                                        sample_offset = ast_tellstream(fs);
-                                       ast_agi_send(agi->fd, chan, "200 result=%d (dtmf) endpos=%ld\n", f->subclass.integer, sample_offset);
                                        ast_closestream(fs);
+                                       ast_agi_send(agi->fd, chan, "200 result=%d (dtmf) endpos=%ld\n", f->subclass.integer, sample_offset);
                                        ast_frfree(f);
                                        if (sildet)
                                                ast_dsp_free(sildet);
@@ -2467,8 +2467,8 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const
                        ast_truncstream(fs);
                        sample_offset = ast_tellstream(fs);
                }
-               ast_agi_send(agi->fd, chan, "200 result=%d (timeout) endpos=%ld\n", res, sample_offset);
                ast_closestream(fs);
+               ast_agi_send(agi->fd, chan, "200 result=%d (timeout) endpos=%ld\n", res, sample_offset);
        }
 
        if (silence > 0) {