Page MenuHomeFreeBSD

D48919.diff
No OneTemporary

D48919.diff

diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -87,7 +87,7 @@
static fo_rdwr_t soo_write;
static fo_ioctl_t soo_ioctl;
static fo_poll_t soo_poll;
-extern fo_kqfilter_t soo_kqfilter;
+static fo_kqfilter_t soo_kqfilter;
static fo_stat_t soo_stat;
static fo_close_t soo_close;
static fo_chmod_t soo_chmod;
@@ -291,6 +291,14 @@
return (so->so_proto->pr_sopoll(so, events, td));
}
+static int
+soo_kqfilter(struct file *fp, struct knote *kn)
+{
+ struct socket *so = fp->f_data;
+
+ return (so->so_proto->pr_kqfilter(so, kn));
+}
+
static int
soo_stat(struct file *fp, struct stat *ub, struct ucred *active_cred)
{
diff --git a/sys/kern/uipc_domain.c b/sys/kern/uipc_domain.c
--- a/sys/kern/uipc_domain.c
+++ b/sys/kern/uipc_domain.c
@@ -191,6 +191,7 @@
DEFAULT(pr_sopoll, sopoll_generic);
DEFAULT(pr_setsbopt, sbsetopt);
DEFAULT(pr_aio_queue, soaio_queue_generic);
+ DEFAULT(pr_kqfilter, sokqfilter_generic);
#define NOTSUPP(foo) if (pr->foo == NULL) pr->foo = foo ## _notsupp
NOTSUPP(pr_accept);
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -186,7 +186,6 @@
static void filt_sowdetach(struct knote *kn);
static int filt_sowrite(struct knote *kn, long hint);
static int filt_soempty(struct knote *kn, long hint);
-fo_kqfilter_t soo_kqfilter;
static const struct filterops soread_filtops = {
.f_isfd = 1,
@@ -4488,9 +4487,8 @@
}
int
-soo_kqfilter(struct file *fp, struct knote *kn)
+sokqfilter_generic(struct socket *so, struct knote *kn)
{
- struct socket *so = kn->kn_fp->f_data;
struct sockbuf *sb;
sb_which which;
struct knlist *knl;
diff --git a/sys/sys/protosw.h b/sys/sys/protosw.h
--- a/sys/sys/protosw.h
+++ b/sys/sys/protosw.h
@@ -51,6 +51,7 @@
struct ucred;
struct uio;
struct kaiocb;
+struct knote;
enum shutdown_how;
/* USE THESE FOR YOUR PROTOTYPES ! */
@@ -89,6 +90,7 @@
typedef int pr_soreceive_t(struct socket *, struct sockaddr **,
struct uio *, struct mbuf **, struct mbuf **, int *);
typedef int pr_sopoll_t(struct socket *, int, struct thread *);
+typedef int pr_kqfilter_t(struct socket *, struct knote *);
typedef void pr_sosetlabel_t(struct socket *);
typedef void pr_close_t(struct socket *);
typedef int pr_bindat_t(int, struct socket *, struct sockaddr *,
@@ -138,6 +140,7 @@
pr_sosetlabel_t *pr_sosetlabel; /* MAC, XXXGL: remove */
pr_setsbopt_t *pr_setsbopt; /* Socket buffer ioctls */
pr_chmod_t *pr_chmod; /* fchmod(2) */
+ pr_kqfilter_t *pr_kqfilter; /* kevent(2) */
};
#endif /* defined(_KERNEL) || defined(_WANT_PROTOSW) */
#ifdef _KERNEL
diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h
--- a/sys/sys/socketvar.h
+++ b/sys/sys/socketvar.h
@@ -527,6 +527,7 @@
struct socket *
sopeeloff(struct socket *);
int sopoll_generic(struct socket *so, int events, struct thread *td);
+int sokqfilter_generic(struct socket *so, struct knote *kn);
int soaio_queue_generic(struct socket *so, struct kaiocb *job);
int soreceive(struct socket *so, struct sockaddr **paddr, struct uio *uio,
struct mbuf **mp0, struct mbuf **controlp, int *flagsp);

File Metadata

Mime Type
text/plain
Expires
Mon, Jan 19, 6:19 AM (12 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27733860
Default Alt Text
D48919.diff (3 KB)

Event Timeline