Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bbe188c8 authored by Ursula Braun's avatar Ursula Braun Committed by David S. Miller
Browse files

af_iucv: consider state IUCV_CLOSING when closing a socket



Make sure a second invocation of iucv_sock_close() guarantees proper
freeing of an iucv path.

Signed-off-by: default avatarUrsula Braun <ursula.braun@de.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent df833b1d
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -172,6 +172,7 @@ static void iucv_sock_close(struct sock *sk)
			err = iucv_sock_wait_state(sk, IUCV_CLOSED, 0, timeo);
			err = iucv_sock_wait_state(sk, IUCV_CLOSED, 0, timeo);
		}
		}


	case IUCV_CLOSING:   /* fall through */
		sk->sk_state = IUCV_CLOSED;
		sk->sk_state = IUCV_CLOSED;
		sk->sk_state_change(sk);
		sk->sk_state_change(sk);


@@ -224,6 +225,8 @@ static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio)
	spin_lock_init(&iucv_sk(sk)->message_q.lock);
	spin_lock_init(&iucv_sk(sk)->message_q.lock);
	skb_queue_head_init(&iucv_sk(sk)->backlog_skb_q);
	skb_queue_head_init(&iucv_sk(sk)->backlog_skb_q);
	iucv_sk(sk)->send_tag = 0;
	iucv_sk(sk)->send_tag = 0;
	iucv_sk(sk)->path = NULL;
	memset(&iucv_sk(sk)->src_user_id , 0, 32);


	sk->sk_destruct = iucv_sock_destruct;
	sk->sk_destruct = iucv_sock_destruct;
	sk->sk_sndtimeo = IUCV_CONN_TIMEOUT;
	sk->sk_sndtimeo = IUCV_CONN_TIMEOUT;