From a9388f6d391579800fba459ae938aba253555c37 Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Sun, 21 Jan 2018 00:15:39 +0800 Subject: [PATCH] kernel: vfs: don't notify output-only select events by default Output-only events (B_EVENT_ERROR, B_EVENT_DISCONNECTED and B_EVENT_INVALID, with B_EVENT_INVALID masked out before passing down events) are used to indicate error, so they should not be notified if the vnode does not have select(). Bug: 13965 --- src/system/kernel/fs/vfs.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 8f9ebe3e97..a519af4555 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include "EntryCache.h" #include "fifo.h" @@ -5773,8 +5774,12 @@ file_select(struct file_descriptor* descriptor, uint8 event, struct vnode* vnode = descriptor->u.vnode; // If the FS has no select() hook, notify select() now. - if (!HAS_FS_CALL(vnode, select)) - return notify_select_event(sync, event); + if (!HAS_FS_CALL(vnode, select)) { + if (!SELECT_TYPE_IS_OUTPUT_ONLY(event)) + return notify_select_event(sync, event); + else + return B_OK; + } return FS_CALL(vnode, select, descriptor->cookie, event, sync); }