24
24
#include <net/checksum.h>
25
25
26
26
#include <net/inet_sock.h>
27
+ #include <net/inet_common.h>
27
28
#include <net/sock.h>
28
29
#include <net/xfrm.h>
29
30
@@ -170,6 +171,15 @@ const char *dccp_packet_name(const int type)
170
171
171
172
EXPORT_SYMBOL_GPL (dccp_packet_name );
172
173
174
+ static void dccp_sk_destruct (struct sock * sk )
175
+ {
176
+ struct dccp_sock * dp = dccp_sk (sk );
177
+
178
+ ccid_hc_tx_delete (dp -> dccps_hc_tx_ccid , sk );
179
+ dp -> dccps_hc_tx_ccid = NULL ;
180
+ inet_sock_destruct (sk );
181
+ }
182
+
173
183
int dccp_init_sock (struct sock * sk , const __u8 ctl_sock_initialized )
174
184
{
175
185
struct dccp_sock * dp = dccp_sk (sk );
@@ -179,6 +189,7 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
179
189
icsk -> icsk_syn_retries = sysctl_dccp_request_retries ;
180
190
sk -> sk_state = DCCP_CLOSED ;
181
191
sk -> sk_write_space = dccp_write_space ;
192
+ sk -> sk_destruct = dccp_sk_destruct ;
182
193
icsk -> icsk_sync_mss = dccp_sync_mss ;
183
194
dp -> dccps_mss_cache = 536 ;
184
195
dp -> dccps_rate_last = jiffies ;
@@ -219,8 +230,7 @@ void dccp_destroy_sock(struct sock *sk)
219
230
dp -> dccps_hc_rx_ackvec = NULL ;
220
231
}
221
232
ccid_hc_rx_delete (dp -> dccps_hc_rx_ccid , sk );
222
- ccid_hc_tx_delete (dp -> dccps_hc_tx_ccid , sk );
223
- dp -> dccps_hc_rx_ccid = dp -> dccps_hc_tx_ccid = NULL ;
233
+ dp -> dccps_hc_rx_ccid = NULL ;
224
234
225
235
/* clean up feature negotiation state */
226
236
dccp_feat_list_purge (& dp -> dccps_featneg );
0 commit comments