#include <dirent.h>
#include <sys/stat.h>
+#include <sys/wait.h>
#include <math.h>
#include "asterisk/_private.h" /* declare ast_file_init() */
static void filestream_destructor(void *arg)
{
struct ast_filestream *f = arg;
+ int status;
+ int pid = -1;
/* Stop a running stream if there is one */
if (f->owner) {
ast_translator_free_path(f->trans);
if (f->realfilename && f->filename) {
- if (ast_safe_fork(0) == 0) {
+ pid = ast_safe_fork(0);
+ if (!pid) {
execl("/bin/mv", "mv", "-f", f->filename, f->realfilename, SENTINEL);
+ _exit(1);
+ }
+ else if (pid > 0) {
+ /* Block the parent until the move is complete.*/
+ waitpid(pid, &status, 0);
}
}