From 2633a5c1ae542f08f127ba737fa59fb03ed6180b Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 2 May 2020 15:10:14 +0200 Subject: [PATCH] server: Avoid using interlocked functions. Signed-off-by: Alexandre Julliard --- server/change.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/server/change.c b/server/change.c index 6091d21f7f2..a8f3329c722 100644 --- a/server/change.c +++ b/server/change.c @@ -88,7 +88,7 @@ struct dir uid_t uid; /* file stat.st_uid */ struct list entry; /* entry in global change notifications list */ unsigned int filter; /* notification filter */ - int notified; /* SIGIO counter */ + volatile int notified; /* SIGIO counter */ int want_data; /* return change data */ int subtree; /* do we want to watch subdirectories? */ struct list change_records; /* data for the change */ @@ -307,7 +307,7 @@ void do_change_notify( int unix_fd ) LIST_FOR_EACH_ENTRY( dir, &change_list, struct dir, entry ) { if (get_unix_fd( dir->fd ) != unix_fd) continue; - interlocked_xchg_add( &dir->notified, 1 ); + dir->notified = 1; break; } } @@ -319,8 +319,9 @@ void sigio_callback(void) LIST_FOR_EACH_ENTRY( dir, &change_list, struct dir, entry ) { - if (interlocked_xchg( &dir->notified, 0 )) - fd_async_wake_up( dir->fd, ASYNC_TYPE_WAIT, STATUS_ALERTED ); + if (!dir->notified) continue; + dir->notified = 0; + fd_async_wake_up( dir->fd, ASYNC_TYPE_WAIT, STATUS_ALERTED ); } }