Index: oldkernel/linux/arch/sparc64/solaris/timod.c diff -u linux/arch/sparc64/solaris/timod.c:1.1.1.1 linux/arch/sparc64/solaris/timod.c:1.2 --- linux/arch/sparc64/solaris/timod.c:1.1.1.1 Wed May 31 12:33:53 2000 +++ linux/arch/sparc64/solaris/timod.c Thu Jun 1 15:08:24 2000 @@ -154,7 +154,7 @@ sock = ¤t->files->fd[fd]->f_dentry->d_inode->u.socket_i; wake_up_interruptible(&sock->wait); if (sock->fasync_list && !(sock->flags & SO_WAITDATA)) - kill_fasync(sock->fasync_list, SIGIO); + kill_fasync(sock->fasync_list, SIGIO, POLL_IN); SOLD("done"); } Index: oldkernel/linux/drivers/char/adbmouse.c diff -u linux/drivers/char/adbmouse.c:1.1.1.1 linux/drivers/char/adbmouse.c:1.2 --- linux/drivers/char/adbmouse.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/adbmouse.c Thu Jun 1 15:08:24 2000 @@ -134,7 +134,7 @@ mouse.ready = 1; wake_up_interruptible(&mouse.wait); if (mouse.fasyncptr) - kill_fasync(mouse.fasyncptr, SIGIO); + kill_fasync(mouse.fasyncptr, SIGIO, POLL_IN); } static int fasync_mouse(int fd, struct file *filp, int on) Index: oldkernel/linux/drivers/char/amigamouse.c diff -u linux/drivers/char/amigamouse.c:1.1.1.1 linux/drivers/char/amigamouse.c:1.2 --- linux/drivers/char/amigamouse.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/amigamouse.c Thu Jun 1 15:08:24 2000 @@ -154,7 +154,7 @@ mouse.dy = 2048; if (mouse.fasyncptr) - kill_fasync(mouse.fasyncptr, SIGIO); + kill_fasync(mouse.fasyncptr, SIGIO, POLL_IN); } AMI_MSE_INT_ON(); } Index: oldkernel/linux/drivers/char/atarimouse.c diff -u linux/drivers/char/atarimouse.c:1.1.1.1 linux/drivers/char/atarimouse.c:1.2 --- linux/drivers/char/atarimouse.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/atarimouse.c Thu Jun 1 15:08:24 2000 @@ -49,7 +49,7 @@ mouse.ready = 1; wake_up_interruptible(&mouse.wait); if (mouse.fasyncptr) - kill_fasync(mouse.fasyncptr, SIGIO); + kill_fasync(mouse.fasyncptr, SIGIO, POLL_IN); /* ikbd_mouse_rel_pos(); */ } Index: oldkernel/linux/drivers/char/atixlmouse.c diff -u linux/drivers/char/atixlmouse.c:1.1.1.1 linux/drivers/char/atixlmouse.c:1.2 --- linux/drivers/char/atixlmouse.c:1.1.1.1 Wed May 31 12:33:50 2000 +++ linux/drivers/char/atixlmouse.c Thu Jun 1 15:08:24 2000 @@ -90,7 +90,7 @@ mouse.ready = 1; wake_up_interruptible(&mouse.wait); if (mouse.fasync) - kill_fasync(mouse.fasync, SIGIO); + kill_fasync(mouse.fasync, SIGIO, POLL_IN); } ATIXL_MSE_ENABLE_UPDATE(); } Index: oldkernel/linux/drivers/char/busmouse.c diff -u linux/drivers/char/busmouse.c:1.1.1.1 linux/drivers/char/busmouse.c:1.2 --- linux/drivers/char/busmouse.c:1.1.1.1 Wed May 31 12:33:50 2000 +++ linux/drivers/char/busmouse.c Thu Jun 1 15:08:24 2000 @@ -105,7 +105,7 @@ mouse.dy = 2048; if (mouse.fasyncptr) - kill_fasync(mouse.fasyncptr, SIGIO); + kill_fasync(mouse.fasyncptr, SIGIO, POLL_IN); } MSE_INT_ON(); } Index: oldkernel/linux/drivers/char/dn_keyb.c diff -u linux/drivers/char/dn_keyb.c:1.1.1.1 linux/drivers/char/dn_keyb.c:1.2 --- linux/drivers/char/dn_keyb.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/dn_keyb.c Thu Jun 1 15:08:24 2000 @@ -468,7 +468,7 @@ if (mouse_dy > 2048) mouse_dy = 2048; if (mouse_fasyncptr) - kill_fasync(mouse_fasyncptr, SIGIO); + kill_fasync(mouse_fasyncptr, SIGIO, POLL_IN); } mouse_byte_count=0; /* printk("mouse: %d, %d, %x\n",mouse_x,mouse_y,buttons); */ Index: oldkernel/linux/drivers/char/msbusmouse.c diff -u linux/drivers/char/msbusmouse.c:1.1.1.1 linux/drivers/char/msbusmouse.c:1.2 --- linux/drivers/char/msbusmouse.c:1.1.1.1 Wed May 31 12:33:50 2000 +++ linux/drivers/char/msbusmouse.c Thu Jun 1 15:08:24 2000 @@ -89,7 +89,7 @@ mouse.ready = 1; wake_up_interruptible(&mouse.wait); if (mouse.fasyncptr) - kill_fasync(mouse.fasyncptr, SIGIO); + kill_fasync(mouse.fasyncptr, SIGIO, POLL_IN); } } Index: oldkernel/linux/drivers/char/n_hdlc.c diff -u linux/drivers/char/n_hdlc.c:1.1.1.1 linux/drivers/char/n_hdlc.c:1.2 --- linux/drivers/char/n_hdlc.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/n_hdlc.c Thu Jun 1 15:08:24 2000 @@ -660,7 +660,7 @@ /* wake up any blocked reads and perform async signalling */ wake_up_interruptible (&n_hdlc->read_wait); if (n_hdlc->tty->fasync != NULL) - kill_fasync (n_hdlc->tty->fasync, SIGIO); + kill_fasync (n_hdlc->tty->fasync, SIGIO, POLL_IN); } /* end of n_hdlc_tty_receive() */ Index: oldkernel/linux/drivers/char/n_tty.c diff -u linux/drivers/char/n_tty.c:1.1.1.1 linux/drivers/char/n_tty.c:1.2 --- linux/drivers/char/n_tty.c:1.1.1.1 Wed May 31 12:33:50 2000 +++ linux/drivers/char/n_tty.c Thu Jun 1 15:08:24 2000 @@ -604,7 +604,7 @@ tty->canon_head = tty->read_head; tty->canon_data++; if (tty->fasync) - kill_fasync(tty->fasync, SIGIO); + kill_fasync(tty->fasync, SIGIO, POLL_IN); if (tty->read_wait) wake_up_interruptible(&tty->read_wait); return; @@ -706,7 +706,7 @@ if (!tty->icanon && (tty->read_cnt >= tty->minimum_to_wake)) { if (tty->fasync) - kill_fasync(tty->fasync, SIGIO); + kill_fasync(tty->fasync, SIGIO, POLL_IN); if (tty->read_wait) wake_up_interruptible(&tty->read_wait); } Index: oldkernel/linux/drivers/char/pc110pad.c diff -u linux/drivers/char/pc110pad.c:1.1.1.1 linux/drivers/char/pc110pad.c:1.2 --- linux/drivers/char/pc110pad.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/pc110pad.c Thu Jun 1 15:08:24 2000 @@ -75,7 +75,7 @@ { wake_up_interruptible(&queue); if(asyncptr) - kill_fasync(asyncptr, SIGIO); + kill_fasync(asyncptr, SIGIO, POLL_IN); } Index: oldkernel/linux/drivers/char/pc_keyb.c diff -u linux/drivers/char/pc_keyb.c:1.1.1.1 linux/drivers/char/pc_keyb.c:1.2 --- linux/drivers/char/pc_keyb.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/pc_keyb.c Thu Jun 1 15:08:24 2000 @@ -403,7 +403,7 @@ if (head != queue->tail) { queue->head = head; if (queue->fasync) - kill_fasync(queue->fasync, SIGIO); + kill_fasync(queue->fasync, SIGIO, POLL_IN); wake_up_interruptible(&queue->proc_list); } } Index: oldkernel/linux/drivers/char/qpmouse.c diff -u linux/drivers/char/qpmouse.c:1.1.1.1 linux/drivers/char/qpmouse.c:1.2 --- linux/drivers/char/qpmouse.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/char/qpmouse.c Thu Jun 1 15:08:24 2000 @@ -134,7 +134,7 @@ } queue->head = head; if (queue->fasync) - kill_fasync(queue->fasync, SIGIO); + kill_fasync(queue->fasync, SIGIO, POLL_IN); wake_up_interruptible(&queue->proc_list); } Index: oldkernel/linux/drivers/net/ppp.c diff -u linux/drivers/net/ppp.c:1.1.1.1 linux/drivers/net/ppp.c:1.2 --- linux/drivers/net/ppp.c:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/drivers/net/ppp.c Thu Jun 1 15:08:24 2000 @@ -2372,7 +2372,7 @@ wake_up_interruptible (&ppp->read_wait); if (ppp->tty->fasync != NULL) - kill_fasync (ppp->tty->fasync, SIGIO); + kill_fasync (ppp->tty->fasync, SIGIO, POLL_IN); return 1; } Index: oldkernel/linux/drivers/net/sk_mca.h diff -u linux/drivers/net/sk_mca.h:1.1.1.1 linux/drivers/net/sk_mca.h:1.2 --- linux/drivers/net/sk_mca.h:1.1.1.1 Wed May 31 12:33:50 2000 +++ linux/drivers/net/sk_mca.h Thu Jun 1 15:08:24 2000 @@ -168,7 +168,7 @@ #endif /* _SK_MCA_DRIVER_ */ -extern int skmca_probe(struct device *); +extern int skmca_probe(struct net_device *); #endif /* _SK_MCA_INCLUDE_ */ Index: oldkernel/linux/drivers/sbus/char/pcikbd.c diff -u linux/drivers/sbus/char/pcikbd.c:1.1.1.1 linux/drivers/sbus/char/pcikbd.c:1.2 --- linux/drivers/sbus/char/pcikbd.c:1.1.1.1 Wed May 31 12:33:52 2000 +++ linux/drivers/sbus/char/pcikbd.c Thu Jun 1 15:08:24 2000 @@ -774,7 +774,7 @@ queue->head = head; aux_ready = 1; if (queue->fasync) - kill_fasync(queue->fasync, SIGIO); + kill_fasync(queue->fasync, SIGIO, POLL_IN); wake_up_interruptible(&queue->proc_list); } Index: oldkernel/linux/drivers/sbus/char/sunkbd.c diff -u linux/drivers/sbus/char/sunkbd.c:1.1.1.1 linux/drivers/sbus/char/sunkbd.c:1.2 --- linux/drivers/sbus/char/sunkbd.c:1.1.1.1 Wed May 31 12:33:52 2000 +++ linux/drivers/sbus/char/sunkbd.c Thu Jun 1 15:08:24 2000 @@ -1278,7 +1278,7 @@ kbd_head = next; } if (kb_fasync) - kill_fasync (kb_fasync, SIGIO); + kill_fasync (kb_fasync, SIGIO, POLL_IN); wake_up_interruptible (&kbd_wait); } Index: oldkernel/linux/drivers/sbus/char/sunmouse.c diff -u linux/drivers/sbus/char/sunmouse.c:1.1.1.1 linux/drivers/sbus/char/sunmouse.c:1.2 --- linux/drivers/sbus/char/sunmouse.c:1.1.1.1 Wed May 31 12:33:52 2000 +++ linux/drivers/sbus/char/sunmouse.c Thu Jun 1 15:08:24 2000 @@ -137,7 +137,7 @@ } sunmouse.ready = 1; if (sunmouse.fasync) - kill_fasync (sunmouse.fasync, SIGIO); + kill_fasync (sunmouse.fasync, SIGIO, POLL_IN); wake_up_interruptible (&sunmouse.proc_list); } @@ -365,7 +365,7 @@ */ sunmouse.ready = 1; if (sunmouse.fasync) - kill_fasync (sunmouse.fasync, SIGIO); + kill_fasync (sunmouse.fasync, SIGIO, POLL_IN); wake_up_interruptible(&sunmouse.proc_list); } return; Index: oldkernel/linux/drivers/scsi/sg.c diff -u linux/drivers/scsi/sg.c:1.1.1.1 linux/drivers/scsi/sg.c:1.2 --- linux/drivers/scsi/sg.c:1.1.1.1 Wed May 31 12:33:51 2000 +++ linux/drivers/scsi/sg.c Thu Jun 1 15:08:24 2000 @@ -808,7 +808,7 @@ if (sfp && srp) { wake_up_interruptible(&sfp->read_wait); if (sfp->async_qp) - kill_fasync(sfp->async_qp, SIGPOLL); + kill_fasync(sfp->async_qp, SIGIO, POLL_IN); } } Index: oldkernel/linux/drivers/sgi/char/shmiq.c diff -u linux/drivers/sgi/char/shmiq.c:1.1.1.1 linux/drivers/sgi/char/shmiq.c:1.2 --- linux/drivers/sgi/char/shmiq.c:1.1.1.1 Wed May 31 12:33:52 2000 +++ linux/drivers/sgi/char/shmiq.c Thu Jun 1 15:08:24 2000 @@ -118,7 +118,7 @@ s->tail = tail_next; shmiqs [device].tail = tail_next; if (shmiqs [device].fasync) - kill_fasync (shmiqs [device].fasync, SIGIO); + kill_fasync (shmiqs [device].fasync, SIGIO, POLL_IN); wake_up_interruptible (&shmiqs [device].proc_list); } Index: oldkernel/linux/drivers/telephony/ixj.c diff -u linux/drivers/telephony/ixj.c:1.1.1.1 linux/drivers/telephony/ixj.c:1.2 --- linux/drivers/telephony/ixj.c:1.1.1.1 Wed May 31 12:33:53 2000 +++ linux/drivers/telephony/ixj.c Thu Jun 1 15:08:24 2000 @@ -446,7 +446,7 @@ j->m_hook = 0; j->ex.bits.hookstate = 1; if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of change + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of change } goto timer_end; } @@ -536,7 +536,7 @@ if (!j->m_hook) { j->m_hook = j->ex.bits.hookstate = 1; if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of change + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of change } } else { if ((j->dsp.low == 0x21 || j->dsp.low == 0x22) && @@ -552,7 +552,7 @@ j->m_hook = 0; j->ex.bits.hookstate = 1; if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of change + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of change } } } @@ -642,7 +642,7 @@ if (j->ex.bytes) { wake_up_interruptible(&j->poll_q); // Wake any blocked selects if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of change + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of change } } else { break; @@ -917,7 +917,7 @@ if (j->port != PORT_POTS) { j->ex.bits.hookstate = 1; if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of change + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of change } } @@ -1473,7 +1473,7 @@ wake_up_interruptible(&j->poll_q); // Wake any blocked selects if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of frame + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of frame } } @@ -1559,7 +1559,7 @@ wake_up_interruptible(&j->poll_q); // Wake any blocked selects if (j->async_queue) - kill_fasync(j->async_queue, SIGIO); // Send apps notice of empty buffer + kill_fasync(j->async_queue, SIGIO, POLL_IN); // Send apps notice of empty buffer #ifdef PERFMON_STATS ++j->frameswritten; #endif Index: oldkernel/linux/drivers/usb/mouse.c diff -u linux/drivers/usb/mouse.c:1.1.1.1 linux/drivers/usb/mouse.c:1.2 --- linux/drivers/usb/mouse.c:1.1.1.1 Wed May 31 12:33:53 2000 +++ linux/drivers/usb/mouse.c Thu Jun 1 15:08:24 2000 @@ -81,7 +81,7 @@ wake_up_interruptible(&mouse->wait); if (mouse->fasync) - kill_fasync(mouse->fasync, SIGIO); + kill_fasync(mouse->fasync, SIGIO, POLL_IN); return 1; } Index: oldkernel/linux/fs/fcntl.c diff -u linux/fs/fcntl.c:1.2 linux/fs/fcntl.c:1.3 --- linux/fs/fcntl.c:1.2 Thu Jun 1 15:03:08 2000 +++ linux/fs/fcntl.c Thu Jun 1 15:08:25 2000 @@ -8,6 +8,8 @@ #include #include +#include +#include #include extern int sock_fcntl (struct file *, unsigned int cmd, unsigned long arg); @@ -236,7 +238,20 @@ return err; } -static void send_sigio(struct fown_struct *fown, struct fasync_struct *fa) +/* Table to convert sigio signal codes into poll band bitmaps */ + +static int band_table[NSIGPOLL+1] = { + ~0, + POLLIN | POLLRDNORM, /* POLL_IN */ + POLLOUT | POLLWRNORM | POLLWRBAND, /* POLL_OUT */ + POLLIN | POLLRDNORM | POLLMSG, /* POLL_MSG */ + POLLERR, /* POLL_ERR */ + POLLPRI | POLLRDBAND, /* POLL_PRI */ + POLLHUP | POLLERR /* POLL_HUP */ +}; + +static void send_sigio(struct fown_struct *fown, struct fasync_struct *fa, + int reason) { struct task_struct * p; int pid = fown->pid; @@ -265,9 +280,11 @@ back to SIGIO in that case. --sct */ si.si_signo = fown->signum; si.si_errno = 0; - si.si_code = SI_SIGIO; - si.si_pid = pid; - si.si_uid = uid; + si.si_code = reason; + if (reason < 0 || reason > NSIGPOLL) + si.si_band = ~0; + else + si.si_band = band_table[reason]; si.si_fd = fa->fa_fd; if (!send_sig_info(fown->signum, &si, p)) break; @@ -279,7 +296,7 @@ read_unlock(&tasklist_lock); } -void kill_fasync(struct fasync_struct *fa, int sig) +void kill_fasync(struct fasync_struct *fa, int sig, int band) { while (fa) { struct fown_struct * fown; @@ -289,8 +306,11 @@ return; } fown = &fa->fa_file->f_owner; - if (fown->pid) - send_sigio(fown, fa); + /* Don't send SIGURG to processes which have not set a + queued signum: SIGURG has its own default signalling + mechanism. */ + if (fown->pid && !(sig == SIGURG && fown->signum == 0)) + send_sigio(fown, fa, band); fa = fa->fa_next; } } Index: oldkernel/linux/ibcs/iBCSemul/timod.c diff -u linux/ibcs/iBCSemul/timod.c:1.1.1.1 linux/ibcs/iBCSemul/timod.c:1.2 --- linux/ibcs/iBCSemul/timod.c:1.1.1.1 Wed May 31 12:41:32 2000 +++ linux/ibcs/iBCSemul/timod.c Thu Jun 1 15:08:25 2000 @@ -46,7 +46,7 @@ #define esp u_regs[UREG_FP] #endif -extern void kill_fasync(struct fasync_struct *fa, int sig); +extern void kill_fasync(struct fasync_struct *fa, int sig, int band); #ifdef IBCS_TRACE static char * @@ -82,7 +82,7 @@ wake_up_interruptible(&sock->wait); if (sock->fasync_list && !(sock->flags & SO_WAITDATA)) - kill_fasync(sock->fasync_list, SIGIO); + kill_fasync(sock->fasync_list, SIGIO, POLL_IN); } Index: oldkernel/linux/include/asm-sparc/poll.h diff -u linux/include/asm-sparc/poll.h:1.1.1.1 linux/include/asm-sparc/poll.h:1.2 --- linux/include/asm-sparc/poll.h:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/include/asm-sparc/poll.h Thu Jun 1 15:08:25 2000 @@ -11,6 +11,7 @@ #define POLLWRNORM POLLOUT #define POLLRDBAND 128 #define POLLWRBAND 256 +#define POLLMSG 512 struct pollfd { int fd; Index: oldkernel/linux/include/asm-sparc64/poll.h diff -u linux/include/asm-sparc64/poll.h:1.1.1.1 linux/include/asm-sparc64/poll.h:1.2 --- linux/include/asm-sparc64/poll.h:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/include/asm-sparc64/poll.h Thu Jun 1 15:08:25 2000 @@ -11,6 +11,7 @@ #define POLLWRNORM POLLOUT #define POLLRDBAND 128 #define POLLWRBAND 256 +#define POLLMSG 512 struct pollfd { int fd; Index: oldkernel/linux/include/linux/fs.h diff -u linux/include/linux/fs.h:1.3 linux/include/linux/fs.h:1.4 --- linux/include/linux/fs.h:1.3 Thu Jun 1 15:03:09 2000 +++ linux/include/linux/fs.h Thu Jun 1 15:08:25 2000 @@ -730,7 +730,7 @@ #define __getname() ((char *) __get_free_page(GFP_KERNEL)) #define putname(name) free_page((unsigned long)(name)) -extern void kill_fasync(struct fasync_struct *fa, int sig); +extern void kill_fasync(struct fasync_struct *fa, int sig, int band); extern int register_blkdev(unsigned int, const char *, struct file_operations *); extern int unregister_blkdev(unsigned int major, const char * name); extern int blkdev_open(struct inode * inode, struct file * filp); Index: oldkernel/linux/include/linux/net.h diff -u linux/include/linux/net.h:1.1.1.1 linux/include/linux/net.h:1.2 --- linux/include/linux/net.h:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/include/linux/net.h Thu Jun 1 15:08:25 2000 @@ -126,7 +126,7 @@ }; extern struct net_proto_family *net_families[]; -extern int sock_wake_async(struct socket *sk, int how); +extern int sock_wake_async(struct socket *sk, int how, int band); extern int sock_register(struct net_proto_family *fam); extern int sock_unregister(int family); extern struct socket *sock_alloc(void); Index: oldkernel/linux/net/socket.c diff -u linux/net/socket.c:1.1.1.1 linux/net/socket.c:1.2 --- linux/net/socket.c:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/net/socket.c Thu Jun 1 15:08:25 2000 @@ -544,7 +544,7 @@ return 0; } -int sock_wake_async(struct socket *sock, int how) +int sock_wake_async(struct socket *sock, int how, int band) { if (!sock || !sock->fasync_list) return -1; @@ -561,8 +561,10 @@ /* fall through */ case 0: call_kill: - kill_fasync(sock->fasync_list, SIGIO); + kill_fasync(sock->fasync_list, SIGIO, band); break; + case 3: + kill_fasync(sock->fasync_list, SIGURG, band); } return 0; } Index: oldkernel/linux/net/core/sock.c diff -u linux/net/core/sock.c:1.1.1.1 linux/net/core/sock.c:1.2 --- linux/net/core/sock.c:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/net/core/sock.c Thu Jun 1 15:08:25 2000 @@ -982,7 +982,7 @@ { if (!sk->dead) { wake_up_interruptible(sk->sleep); - sock_wake_async(sk->socket,0); + sock_wake_async(sk->socket,0,POLL_ERR); } } @@ -990,7 +990,7 @@ { if(!sk->dead) { wake_up_interruptible(sk->sleep); - sock_wake_async(sk->socket,1); + sock_wake_async(sk->socket,1,POLL_IN); } } @@ -1005,7 +1005,7 @@ /* Should agree with poll, otherwise some programs break */ if (sock_writeable(sk)) - sock_wake_async(sk->socket, 2); + sock_wake_async(sk->socket, 2, POLL_OUT); } } Index: oldkernel/linux/net/ipv4/tcp.c diff -u linux/net/ipv4/tcp.c:1.1.1.1 linux/net/ipv4/tcp.c:1.2 --- linux/net/ipv4/tcp.c:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/net/ipv4/tcp.c Thu Jun 1 15:08:25 2000 @@ -615,7 +615,7 @@ wake_up_interruptible(sk->sleep); if (sock_wspace(sk) >= tcp_min_write_space(sk)) - sock_wake_async(sk->socket, 2); + sock_wake_async(sk->socket, 2, POLL_OUT); } Index: oldkernel/linux/net/ipv4/tcp_input.c diff -u linux/net/ipv4/tcp_input.c:1.1.1.1 linux/net/ipv4/tcp_input.c:1.2 --- linux/net/ipv4/tcp_input.c:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/net/ipv4/tcp_input.c Thu Jun 1 15:08:25 2000 @@ -1131,7 +1131,7 @@ if (!sk->dead) { sk->state_change(sk); - sock_wake_async(sk->socket, 1); + sock_wake_async(sk->socket, 1, POLL_HUP); } switch(sk->state) { @@ -1669,6 +1669,7 @@ kill_proc(sk->proc, SIGURG, 1); else kill_pg(-sk->proc, SIGURG, 1); + sock_wake_async(sk->socket, 3, POLL_PRI); } /* We may be adding urgent data when the last byte read was @@ -2213,7 +2214,7 @@ if(!sk->dead) { sk->state_change(sk); - sock_wake_async(sk->socket, 0); + sock_wake_async(sk->socket, 0, POLL_OUT); } } else { if(th->syn && !th->rst) { Index: oldkernel/linux/net/unix/af_unix.c diff -u linux/net/unix/af_unix.c:1.1.1.1 linux/net/unix/af_unix.c:1.2 --- linux/net/unix/af_unix.c:1.1.1.1 Wed May 31 12:33:49 2000 +++ linux/net/unix/af_unix.c Thu Jun 1 15:08:25 2000 @@ -1515,7 +1515,7 @@ return; wake_up_interruptible(sk->sleep); if (sk->sndbuf - (int)atomic_read(&sk->wmem_alloc) >= MIN_WRITE_SPACE) - sock_wake_async(sk->socket, 2); + sock_wake_async(sk->socket, 2, POLL_OUT); } #ifdef CONFIG_PROC_FS