diff -urN linux-2.4.19-old/drivers/net/ppp_generic.c linux-2.4.19-new/drivers/net/ppp_generic.c --- linux-2.4.19-old/drivers/net/ppp_generic.c 2002-07-20 20:52:50.000000000 +1000 +++ linux-2.4.19-new/drivers/net/ppp_generic.c 2002-09-17 18:12:19.000000000 +1000 @@ -378,18 +378,20 @@ { struct ppp_file *pf = file->private_data; DECLARE_WAITQUEUE(wait, current); - ssize_t ret; + ssize_t ret = 0; struct sk_buff *skb = 0; - if (pf == 0) - return -ENXIO; + if (pf == 0) { + ret = -ENXIO; + goto out; + } + add_wait_queue(&pf->rwait, &wait); for (;;) { set_current_state(TASK_INTERRUPTIBLE); skb = skb_dequeue(&pf->rq); if (skb) break; - ret = 0; if (pf->dead) break; ret = -EAGAIN;