|
@@ -24,6 +24,7 @@
|
|
|
#include <net/checksum.h>
|
|
|
|
|
|
#include <net/inet_sock.h>
|
|
|
+#include <net/inet_common.h>
|
|
|
#include <net/sock.h>
|
|
|
#include <net/xfrm.h>
|
|
|
|
|
@@ -170,6 +171,15 @@ const char *dccp_packet_name(const int type)
|
|
|
|
|
|
EXPORT_SYMBOL_GPL(dccp_packet_name);
|
|
|
|
|
|
+static void dccp_sk_destruct(struct sock *sk)
|
|
|
+{
|
|
|
+ struct dccp_sock *dp = dccp_sk(sk);
|
|
|
+
|
|
|
+ ccid_hc_tx_delete(dp->dccps_hc_tx_ccid, sk);
|
|
|
+ dp->dccps_hc_tx_ccid = NULL;
|
|
|
+ inet_sock_destruct(sk);
|
|
|
+}
|
|
|
+
|
|
|
int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
|
|
|
{
|
|
|
struct dccp_sock *dp = dccp_sk(sk);
|
|
@@ -179,6 +189,7 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
|
|
|
icsk->icsk_syn_retries = sysctl_dccp_request_retries;
|
|
|
sk->sk_state = DCCP_CLOSED;
|
|
|
sk->sk_write_space = dccp_write_space;
|
|
|
+ sk->sk_destruct = dccp_sk_destruct;
|
|
|
icsk->icsk_sync_mss = dccp_sync_mss;
|
|
|
dp->dccps_mss_cache = 536;
|
|
|
dp->dccps_rate_last = jiffies;
|
|
@@ -219,8 +230,7 @@ void dccp_destroy_sock(struct sock *sk)
|
|
|
dp->dccps_hc_rx_ackvec = NULL;
|
|
|
}
|
|
|
ccid_hc_rx_delete(dp->dccps_hc_rx_ccid, sk);
|
|
|
- ccid_hc_tx_delete(dp->dccps_hc_tx_ccid, sk);
|
|
|
- dp->dccps_hc_rx_ccid = dp->dccps_hc_tx_ccid = NULL;
|
|
|
+ dp->dccps_hc_rx_ccid = NULL;
|
|
|
|
|
|
/* clean up feature negotiation state */
|
|
|
dccp_feat_list_purge(&dp->dccps_featneg);
|