summaryrefslogtreecommitdiff
path: root/pbx
diff options
context:
space:
mode:
Diffstat (limited to 'pbx')
-rw-r--r--pbx/pbx_spool.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/pbx/pbx_spool.c b/pbx/pbx_spool.c
index 0dad6060d..c858ed22f 100644
--- a/pbx/pbx_spool.c
+++ b/pbx/pbx_spool.c
@@ -102,6 +102,14 @@ struct outgoing {
};
#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);
#endif
@@ -323,6 +331,10 @@ static int remove_from_queue(struct outgoing *o, const char *status)
char newfn[256];
const char *bname;
+#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
+ struct direntry *cur;
+#endif
+
if (!ast_test_flag(&o->options, SPOOL_FLAG_ALWAYS_DELETE)) {
struct stat current_file_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)) {
unlink(o->fn);
return 0;
@@ -486,14 +511,6 @@ static int scan_service(const char *fn, time_t now)
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)
/* Only one thread is accessing this list, so no lock is necessary */
@@ -501,6 +518,8 @@ static AST_LIST_HEAD_NOLOCK_STATIC(createlist, direntry);
static AST_LIST_HEAD_NOLOCK_STATIC(openlist, direntry);
#endif
+#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
+
static void queue_file(const char *filename, time_t when)
{
struct stat st;