aboutsummaryrefslogtreecommitdiffstats
path: root/net/irda/af_irda.c
diff options
context:
space:
mode:
authorSamuel Ortiz <samuel@ortiz.org>2007-04-21 01:09:33 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:29:29 -0400
commitd7f48d1a9398a3bd7bb6f4774640b24a0294cda3 (patch)
tree0c98a259f3b391f9d545ae28e6c2b1e1bbf644e0 /net/irda/af_irda.c
parent6e66aa15d8873ae7418d5afc6476daec466ff93b (diff)
[IrDA] af_irda: irda_accept cleanup
This patch removes a cut'n'paste copy of wait_event_interruptible from irda_accept. Signed-off-by: Samuel Ortiz <samuel@ortiz.org> Acked-by: Olaf Kirch <olaf.kirch@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/irda/af_irda.c')
-rw-r--r--net/irda/af_irda.c34
1 files changed, 8 insertions, 26 deletions
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
index e9aa1626ea89..4eda10d79141 100644
--- a/net/irda/af_irda.c
+++ b/net/irda/af_irda.c
@@ -872,37 +872,19 @@ static int irda_accept(struct socket *sock, struct socket *newsock, int flags)
872 * calling us, the data is waiting for us ;-) 872 * calling us, the data is waiting for us ;-)
873 * Jean II 873 * Jean II
874 */ 874 */
875 skb = skb_dequeue(&sk->sk_receive_queue); 875 while (1) {
876 if (skb == NULL) { 876 skb = skb_dequeue(&sk->sk_receive_queue);
877 int ret = 0; 877 if (skb)
878 DECLARE_WAITQUEUE(waitq, current); 878 break;
879 879
880 /* Non blocking operation */ 880 /* Non blocking operation */
881 if (flags & O_NONBLOCK) 881 if (flags & O_NONBLOCK)
882 return -EWOULDBLOCK; 882 return -EWOULDBLOCK;
883 883
884 /* The following code is a cut'n'paste of the 884 err = wait_event_interruptible(*(sk->sk_sleep),
885 * wait_event_interruptible() macro. 885 skb_peek(&sk->sk_receive_queue));
886 * We don't us the macro because the condition has 886 if (err)
887 * side effects : we want to make sure that only one 887 return err;
888 * skb get dequeued - Jean II */
889 add_wait_queue(sk->sk_sleep, &waitq);
890 for (;;) {
891 set_current_state(TASK_INTERRUPTIBLE);
892 skb = skb_dequeue(&sk->sk_receive_queue);
893 if (skb != NULL)
894 break;
895 if (!signal_pending(current)) {
896 schedule();
897 continue;
898 }
899 ret = -ERESTARTSYS;
900 break;
901 }
902 current->state = TASK_RUNNING;
903 remove_wait_queue(sk->sk_sleep, &waitq);
904 if(ret)
905 return -ERESTARTSYS;
906 } 888 }
907 889
908 newsk = newsock->sk; 890 newsk = newsock->sk;