Skip to content
Snippets Groups Projects
Commit 9bb9d225 authored by Joshua Colp's avatar Joshua Colp Committed by Gerrit Code Review
Browse files

Merge "pbx/pbx_spool: Fix issue when call files were executed too early"

parents 4f84142c e6ebddd9
Branches
Tags
No related merge requests found
...@@ -102,6 +102,14 @@ struct outgoing { ...@@ -102,6 +102,14 @@ struct outgoing {
}; };
#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
struct direntry {
AST_LIST_ENTRY(direntry) list;
time_t mtime;
char name[0];
};
static AST_LIST_HEAD_STATIC(dirlist, direntry);
static void queue_file(const char *filename, time_t when); static void queue_file(const char *filename, time_t when);
#endif #endif
...@@ -323,6 +331,10 @@ static int remove_from_queue(struct outgoing *o, const char *status) ...@@ -323,6 +331,10 @@ static int remove_from_queue(struct outgoing *o, const char *status)
char newfn[256]; char newfn[256];
const char *bname; const char *bname;
#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
struct direntry *cur;
#endif
if (!ast_test_flag(&o->options, SPOOL_FLAG_ALWAYS_DELETE)) { if (!ast_test_flag(&o->options, SPOOL_FLAG_ALWAYS_DELETE)) {
struct stat current_file_status; struct stat current_file_status;
...@@ -333,6 +345,19 @@ static int remove_from_queue(struct outgoing *o, const char *status) ...@@ -333,6 +345,19 @@ static int remove_from_queue(struct outgoing *o, const char *status)
} }
} }
#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
AST_LIST_LOCK(&dirlist);
AST_LIST_TRAVERSE_SAFE_BEGIN(&dirlist, cur, list) {
if (!strcmp(cur->name, o->fn)) {
AST_LIST_REMOVE_CURRENT(list);
ast_free(cur);
break;
}
}
AST_LIST_TRAVERSE_SAFE_END;
AST_LIST_UNLOCK(&dirlist);
#endif
if (!ast_test_flag(&o->options, SPOOL_FLAG_ARCHIVE)) { if (!ast_test_flag(&o->options, SPOOL_FLAG_ARCHIVE)) {
unlink(o->fn); unlink(o->fn);
return 0; return 0;
...@@ -486,14 +511,6 @@ static int scan_service(const char *fn, time_t now) ...@@ -486,14 +511,6 @@ static int scan_service(const char *fn, time_t now)
return 0; return 0;
} }
#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
struct direntry {
AST_LIST_ENTRY(direntry) list;
time_t mtime;
char name[0];
};
static AST_LIST_HEAD_STATIC(dirlist, direntry);
#if defined(HAVE_INOTIFY) #if defined(HAVE_INOTIFY)
/* Only one thread is accessing this list, so no lock is necessary */ /* Only one thread is accessing this list, so no lock is necessary */
...@@ -501,6 +518,8 @@ static AST_LIST_HEAD_NOLOCK_STATIC(createlist, direntry); ...@@ -501,6 +518,8 @@ static AST_LIST_HEAD_NOLOCK_STATIC(createlist, direntry);
static AST_LIST_HEAD_NOLOCK_STATIC(openlist, direntry); static AST_LIST_HEAD_NOLOCK_STATIC(openlist, direntry);
#endif #endif
#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
static void queue_file(const char *filename, time_t when) static void queue_file(const char *filename, time_t when)
{ {
struct stat st; struct stat st;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment