Do not grab the NET_LOCK() when polling on unix domain sockets.  This
was the reason for the "X freeze" reported by pirofti@.

ok?

Index: kern/sys_socket.c
===================================================================
RCS file: /cvs/src/sys/kern/sys_socket.c,v
retrieving revision 1.29
diff -u -p -r1.29 sys_socket.c
--- kern/sys_socket.c   14 Feb 2017 09:46:21 -0000      1.29
+++ kern/sys_socket.c   21 Feb 2017 11:00:16 -0000
@@ -142,7 +142,7 @@ soo_poll(struct file *fp, int events, st
        int revents = 0;
        int s;
 
-       NET_LOCK(s);
+       s = solock(so);
        if (events & (POLLIN | POLLRDNORM)) {
                if (soreadable(so))
                        revents |= events & (POLLIN | POLLRDNORM);
@@ -168,7 +168,7 @@ soo_poll(struct file *fp, int events, st
                        so->so_snd.sb_flagsintr |= SB_SEL;
                }
        }
-       NET_UNLOCK(s);
+       sounlock(s);
        return (revents);
 }
 

Reply via email to