diff options
| author | 2002-06-29 02:58:14 +0000 | |
|---|---|---|
| committer | 2002-06-29 02:58:14 +0000 | |
| commit | f509d022d5a5836b14ce4f6f81f193bd02f4d595 (patch) | |
| tree | 6c4b03dfb26f6a0c6346e059f9cade7b3522f1cf /sys/kern/subr_log.c | |
| parent | Add supported controllers. And a warning. (diff) | |
| download | wireguard-openbsd-f509d022d5a5836b14ce4f6f81f193bd02f4d595.tar.xz wireguard-openbsd-f509d022d5a5836b14ce4f6f81f193bd02f4d595.zip | |
kqfilter for the log. niels said i can commit it if it works
and i converted syslog to libevent and it works now (;
Diffstat (limited to 'sys/kern/subr_log.c')
| -rw-r--r-- | sys/kern/subr_log.c | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/sys/kern/subr_log.c b/sys/kern/subr_log.c index dd990012764..0921d9e0c0e 100644 --- a/sys/kern/subr_log.c +++ b/sys/kern/subr_log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: subr_log.c,v 1.7 2001/04/06 04:42:07 csapuntz Exp $ */ +/* $OpenBSD: subr_log.c,v 1.8 2002/06/29 02:58:14 mickey Exp $ */ /* $NetBSD: subr_log.c,v 1.11 1996/03/30 22:24:44 christos Exp $ */ /* @@ -69,6 +69,12 @@ int msgbufmapped; /* is the message buffer mapped */ int msgbufenabled; /* is logging to the buffer enabled */ struct msgbuf *msgbufp; /* the mapped buffer, itself. */ +void filt_logrdetach(struct knote *kn); +int filt_logread(struct knote *kn, long hint); + +struct filterops logread_filtops = + { 1, NULL, filt_logrdetach, filt_logread}; + void initmsgbuf(buf, bufsize) caddr_t buf; @@ -198,6 +204,49 @@ logselect(dev, rw, p) return (0); } +int +logkqfilter(dev_t dev, struct knote *kn) +{ + struct klist *klist; + int s; + + switch (kn->kn_filter) { + case EVFILT_READ: + klist = &logsoftc.sc_selp.si_note; + kn->kn_fop = &logread_filtops; + break; + default: + return (1); + } + + kn->kn_hook = (void *)msgbufp; + + s = splhigh(); + SLIST_INSERT_HEAD(klist, kn, kn_selnext); + splx(s); + + return (0); +} + +void +filt_logrdetach(struct knote *kn) +{ + int s = splhigh(); + + SLIST_REMOVE(&logsoftc.sc_selp.si_note, kn, knote, kn_selnext); + splx(s); +} + +int +filt_logread(struct knote *kn, long hint) +{ + struct msgbuf *p = (struct msgbuf *)kn->kn_hook; + + kn->kn_data = (int)(p->msg_bufx - p->msg_bufr); + + return (p->msg_bufx != p->msg_bufr); +} + void logwakeup() { @@ -211,6 +260,7 @@ logwakeup() wakeup((caddr_t)msgbufp); logsoftc.sc_state &= ~LOG_RDWAIT; } + KNOTE(&logsoftc.sc_selp.si_note, 0); } /*ARGSUSED*/ |
