|
@@ -57,10 +57,16 @@ void dccp_time_wait(struct sock *sk, int state, int timeo)
|
|
|
if (state == DCCP_TIME_WAIT)
|
|
|
timeo = DCCP_TIMEWAIT_LEN;
|
|
|
|
|
|
+ /* tw_timer is pinned, so we need to make sure BH are disabled
|
|
|
+ * in following section, otherwise timer handler could run before
|
|
|
+ * we complete the initialization.
|
|
|
+ */
|
|
|
+ local_bh_disable();
|
|
|
inet_twsk_schedule(tw, timeo);
|
|
|
/* Linkage updates. */
|
|
|
__inet_twsk_hashdance(tw, sk, &dccp_hashinfo);
|
|
|
inet_twsk_put(tw);
|
|
|
+ local_bh_enable();
|
|
|
} else {
|
|
|
/* Sorry, if we're out of memory, just CLOSE this
|
|
|
* socket up. We've got bigger problems than
|