server: Fix a race condition in the delivery of change notifications.
diff --git a/server/change.c b/server/change.c
index 4349d7e..eec1241 100644
--- a/server/change.c
+++ b/server/change.c
@@ -591,11 +591,6 @@
if (!list_empty( &dir->change_q ))
async_terminate_head( &dir->change_q, STATUS_ALERTED );
- else
- {
- dir->signaled++;
- dir_signal_changed( dir );
- }
}
static unsigned int filter_from_event( struct inotify_event *ie )
@@ -1133,6 +1128,11 @@
if (event)
reset_event( event );
+ /* if there's already a change in the queue, send it */
+ if (!list_empty( &dir->change_q ) &&
+ !list_empty( &dir->change_records ))
+ async_terminate_head( &dir->change_q, STATUS_ALERTED );
+
/* setup the real notification */
if (!inotify_adjust_changes( dir ))
dnotify_adjust_changes( dir );