aboutsummaryrefslogtreecommitdiff
path: root/net/atm/svc.c
diff options
context:
space:
mode:
authorUwe Kleine-Koenig <ukl@pengutronix.de>2008-12-12 11:18:54 +0100
committerUwe Kleine-Koenig <ukl@pengutronix.de>2008-12-12 11:18:54 +0100
commit7971db5a4b4176ad5df590fce07a962c643a2740 (patch)
tree6ad8e09c5376c4e4c532c3411b0171ba1011acd9 /net/atm/svc.c
parentd403700bf8fc903584e830967f5d64075770848c (diff)
parentc4edfced662fa64deeed89c7d8c9f96d86130c19 (diff)
Merge branch 'for-rmk-misc' into for-rmk
Diffstat (limited to 'net/atm/svc.c')
-rw-r--r--net/atm/svc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/net/atm/svc.c b/net/atm/svc.c
index de1e4f2f3a4..8fb54dc870b 100644
--- a/net/atm/svc.c
+++ b/net/atm/svc.c
@@ -293,7 +293,10 @@ static int svc_listen(struct socket *sock,int backlog)
error = -EINVAL;
goto out;
}
- vcc_insert_socket(sk);
+ if (test_bit(ATM_VF_LISTEN, &vcc->flags)) {
+ error = -EADDRINUSE;
+ goto out;
+ }
set_bit(ATM_VF_WAITING, &vcc->flags);
prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
sigd_enq(vcc,as_listen,NULL,NULL,&vcc->local);
@@ -307,6 +310,7 @@ static int svc_listen(struct socket *sock,int backlog)
goto out;
}
set_bit(ATM_VF_LISTEN,&vcc->flags);
+ vcc_insert_socket(sk);
sk->sk_max_ack_backlog = backlog > 0 ? backlog : ATM_BACKLOG_DEFAULT;
error = -sk->sk_err;
out: