Index: ncp_sock.c =================================================================== RCS file: /usr/cvs/src/sys/netncp/ncp_sock.c,v retrieving revision 1.16 diff -u -r1.16 ncp_sock.c --- ncp_sock.c 24 Jul 2006 15:20:07 -0000 1.16 +++ ncp_sock.c 2 Aug 2006 20:07:30 -0000 @@ -185,10 +185,28 @@ int ncp_poll(struct socket *so, int events) { - struct thread *td = curthread; - struct ucred *cred = NULL; + struct thread *td = curthread; + int revents; - return (sopoll(so, events, cred, td)); + /* Fake up enough state to look like we are in poll(2). */ + mtx_lock(&sellock); + mtx_lock_spin(&sched_lock); + td->td_flags |= TDF_SELECT; + mtx_unlock_spin(&sched_lock); + mtx_unlock(&sellock); + TAILQ_INIT(&td->td_selq); + + revents = sopoll(so, events, NULL, td); + + /* Tear down the fake poll(2) state. */ + mtx_lock(&sellock); + clear_selinfo_list(td); + mtx_lock_spin(&sched_lock); + td->td_flags &= ~TDF_SELECT; + mtx_unlock_spin(&sched_lock); + mtx_unlock(&sellock); + + return (revents); } int @@ -218,7 +236,7 @@ mtx_unlock(&sellock); TAILQ_INIT(&td->td_selq); - error = ncp_poll(so, events); + error = sopoll(so, events, NULL, td); mtx_lock(&sellock); if (error) { error = 0;