The descriptor returned by file-notify-add-watch is of the form (ID . DIR) (at least when using inotify) and these descriptors are stored in a hash-table using equal as comparator. If multiple clients watch the same file and one of them removes its watch via file-notify-rm-watch, the result is unpredictable. I.e. the function removes some watch (I believe it is the last one added), but not necessarily the one associated with the client calling file-notify-rm-watch on the descriptor it got from calling file-notify-add-watch. I've attached a test case for this. Am I missing something here ? -ap