.. | .. |
---|
487 | 487 | { |
---|
488 | 488 | struct sock *sk = sock->sk; |
---|
489 | 489 | |
---|
| 490 | + lock_sock(sk); |
---|
| 491 | + if (sock->state != SS_UNCONNECTED) { |
---|
| 492 | + release_sock(sk); |
---|
| 493 | + return -EINVAL; |
---|
| 494 | + } |
---|
| 495 | + |
---|
490 | 496 | if (sk->sk_state != TCP_LISTEN) { |
---|
491 | 497 | struct rose_sock *rose = rose_sk(sk); |
---|
492 | 498 | |
---|
.. | .. |
---|
496 | 502 | memset(rose->dest_digis, 0, AX25_ADDR_LEN * ROSE_MAX_DIGIS); |
---|
497 | 503 | sk->sk_max_ack_backlog = backlog; |
---|
498 | 504 | sk->sk_state = TCP_LISTEN; |
---|
| 505 | + release_sock(sk); |
---|
499 | 506 | return 0; |
---|
500 | 507 | } |
---|
| 508 | + release_sock(sk); |
---|
501 | 509 | |
---|
502 | 510 | return -EOPNOTSUPP; |
---|
503 | 511 | } |
---|