From e6f59cdaeb525222d0a062f07fe3ae8b1b7e5167 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Tue, 21 Apr 2009 22:09:24 +0800 Subject: [PATCH] tcp_timer: Add assertion to make sure that tcp timers are only accessed on their pcb's owner CPU --- sys/netinet/tcp_timer2.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sys/netinet/tcp_timer2.h b/sys/netinet/tcp_timer2.h index da2b241249..32abc96ba4 100644 --- a/sys/netinet/tcp_timer2.h +++ b/sys/netinet/tcp_timer2.h @@ -40,6 +40,14 @@ #ifdef _KERNEL +#ifndef _SYS_PARAM_H_ +#include +#endif + +#ifndef _SYS_SYSTM_H_ +#include +#endif + #ifndef _SYS_THREAD2_H_ #include #endif @@ -59,6 +67,8 @@ static __inline void tcp_callout_stop(struct tcpcb *_tp, struct tcp_callout *_tc) { + KKASSERT(_tp->tt_msg->tt_cpuid == mycpuid); + crit_enter(); callout_stop(&_tc->tc_callout); _tp->tt_msg->tt_tasks &= ~_tc->tc_task; @@ -70,6 +80,8 @@ static __inline void tcp_callout_reset(struct tcpcb *_tp, struct tcp_callout *_tc, int _to_ticks, void (*_func)(void *)) { + KKASSERT(_tp->tt_msg->tt_cpuid == mycpuid); + crit_enter(); callout_reset(&_tc->tc_callout, _to_ticks, _func, _tp); _tp->tt_msg->tt_tasks &= ~_tc->tc_task; @@ -82,6 +94,8 @@ tcp_callout_active(struct tcpcb *_tp, struct tcp_callout *_tc) { int _act; + KKASSERT(_tp->tt_msg->tt_cpuid == mycpuid); + crit_enter(); _act = callout_active(&_tc->tc_callout); if (!_act) { @@ -93,8 +107,10 @@ tcp_callout_active(struct tcpcb *_tp, struct tcp_callout *_tc) } static __inline int -tcp_callout_pending(struct tcpcb *_tp __unused, struct tcp_callout *_tc) +tcp_callout_pending(struct tcpcb *_tp, struct tcp_callout *_tc) { + KKASSERT(_tp->tt_msg->tt_cpuid == mycpuid); + return callout_pending(&_tc->tc_callout); } -- 2.41.0