Page MenuHomeFreeBSD

D50850.diff
No OneTemporary

D50850.diff

diff --git a/sys/kern/sys_eventfd.c b/sys/kern/sys_eventfd.c
--- a/sys/kern/sys_eventfd.c
+++ b/sys/kern/sys_eventfd.c
@@ -157,6 +157,27 @@
free(efd, M_EVENTFD);
}
+static void
+eventfd_wakeup(struct eventfd *efd)
+{
+ KNOTE_LOCKED(&efd->efd_sel.si_note, 0);
+ selwakeup(&efd->efd_sel);
+ wakeup(&efd->efd_count);
+}
+
+void
+eventfd_signal(struct eventfd *efd)
+{
+ mtx_lock(&efd->efd_lock);
+
+ if (efd->efd_count < UINT64_MAX)
+ efd->efd_count++;
+
+ eventfd_wakeup(efd);
+
+ mtx_unlock(&efd->efd_lock);
+}
+
static int
eventfd_close(struct file *fp, struct thread *td)
{
@@ -244,9 +265,7 @@
if (error == 0) {
MPASS(UINT64_MAX - efd->efd_count > count);
efd->efd_count += count;
- KNOTE_LOCKED(&efd->efd_sel.si_note, 0);
- selwakeup(&efd->efd_sel);
- wakeup(&efd->efd_count);
+ eventfd_wakeup(efd);
}
mtx_unlock(&efd->efd_lock);
diff --git a/sys/sys/eventfd.h b/sys/sys/eventfd.h
--- a/sys/sys/eventfd.h
+++ b/sys/sys/eventfd.h
@@ -44,6 +44,7 @@
int flags);
struct eventfd *eventfd_get(struct file *fp);
void eventfd_put(struct eventfd *efd);
+void eventfd_signal(struct eventfd *efd);
#else

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 12, 9:51 AM (15 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29576101
Default Alt Text
D50850.diff (1 KB)

Event Timeline