|
@@ -105,6 +105,7 @@ struct tipc_sock {
|
|
static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb);
|
|
static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb);
|
|
static void tipc_data_ready(struct sock *sk);
|
|
static void tipc_data_ready(struct sock *sk);
|
|
static void tipc_write_space(struct sock *sk);
|
|
static void tipc_write_space(struct sock *sk);
|
|
|
|
+static void tipc_sock_destruct(struct sock *sk);
|
|
static int tipc_release(struct socket *sock);
|
|
static int tipc_release(struct socket *sock);
|
|
static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags);
|
|
static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags);
|
|
static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p);
|
|
static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p);
|
|
@@ -381,6 +382,7 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
|
|
sk->sk_rcvbuf = sysctl_tipc_rmem[1];
|
|
sk->sk_rcvbuf = sysctl_tipc_rmem[1];
|
|
sk->sk_data_ready = tipc_data_ready;
|
|
sk->sk_data_ready = tipc_data_ready;
|
|
sk->sk_write_space = tipc_write_space;
|
|
sk->sk_write_space = tipc_write_space;
|
|
|
|
+ sk->sk_destruct = tipc_sock_destruct;
|
|
tsk->conn_timeout = CONN_TIMEOUT_DEFAULT;
|
|
tsk->conn_timeout = CONN_TIMEOUT_DEFAULT;
|
|
tsk->sent_unacked = 0;
|
|
tsk->sent_unacked = 0;
|
|
atomic_set(&tsk->dupl_rcvcnt, 0);
|
|
atomic_set(&tsk->dupl_rcvcnt, 0);
|
|
@@ -470,9 +472,6 @@ static int tipc_release(struct socket *sock)
|
|
tipc_node_remove_conn(net, dnode, tsk->portid);
|
|
tipc_node_remove_conn(net, dnode, tsk->portid);
|
|
}
|
|
}
|
|
|
|
|
|
- /* Discard any remaining (connection-based) messages in receive queue */
|
|
|
|
- __skb_queue_purge(&sk->sk_receive_queue);
|
|
|
|
-
|
|
|
|
/* Reject any messages that accumulated in backlog queue */
|
|
/* Reject any messages that accumulated in backlog queue */
|
|
sock->state = SS_DISCONNECTING;
|
|
sock->state = SS_DISCONNECTING;
|
|
release_sock(sk);
|
|
release_sock(sk);
|
|
@@ -1515,6 +1514,11 @@ static void tipc_data_ready(struct sock *sk)
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void tipc_sock_destruct(struct sock *sk)
|
|
|
|
+{
|
|
|
|
+ __skb_queue_purge(&sk->sk_receive_queue);
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* filter_connect - Handle all incoming messages for a connection-based socket
|
|
* filter_connect - Handle all incoming messages for a connection-based socket
|
|
* @tsk: TIPC socket
|
|
* @tsk: TIPC socket
|