Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142292312
D48919.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D48919.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D48919: sockets: provide protocol method pr_kqfilter
Attached
Detach File
Event Timeline
Log In to Comment