[rtems-libbsd commit] SLEEPQUEUE(9): Properly remove timeout timer

Sebastian Huber sebh at rtems.org
Thu Nov 24 08:49:56 UTC 2016


Module:    rtems-libbsd
Branch:    master
Commit:    cfec4465254ad34b043bee8d4c8b320056dc123d
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=cfec4465254ad34b043bee8d4c8b320056dc123d

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Nov 23 14:17:25 2016 +0100

SLEEPQUEUE(9): Properly remove timeout timer

---

 freebsd/sys/kern/subr_sleepqueue.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c
index 0aed7f5..28eb10b 100644
--- a/freebsd/sys/kern/subr_sleepqueue.c
+++ b/freebsd/sys/kern/subr_sleepqueue.c
@@ -668,7 +668,6 @@ sleepq_switch(void *wchan, int pri)
 		_Thread_Wait_release_default(executing, &lock_context);
 
 		if (unblock) {
-			_Thread_Timer_remove(executing);
 			_Thread_Clear_state(executing, STATES_WAITING_FOR_BSD_WAKEUP);
 		}
 
@@ -689,6 +688,7 @@ sleepq_switch(void *wchan, int pri)
 	}
 
 	_Thread_Wait_release_default(executing, &lock_context);
+	_Thread_Timer_remove(executing);
 
 	if (remove) {
 		sleepq_remove(td, wchan);
@@ -951,7 +951,7 @@ sleepq_resume_thread(struct sleepqueue *sq, struct thread *td, int pri)
 		return (setrunnable(td));
 	}
 #else /* __rtems__ */
-	unblock = _Watchdog_Is_scheduled(&thread->Timer.Watchdog);
+	unblock = false;
 	switch (td->td_sq_state) {
 	case TD_SQ_SLEEPING:
 		unblock = true;
@@ -971,10 +971,7 @@ sleepq_resume_thread(struct sleepqueue *sq, struct thread *td, int pri)
 
 		cpu_self = _Thread_Dispatch_disable_critical(&lock_context);
 		_Thread_Wait_release_default(thread, &lock_context);
-
-		_Thread_Timer_remove(thread);
 		_Thread_Clear_state(thread, STATES_WAITING_FOR_BSD_WAKEUP);
-
 		_Thread_Dispatch_direct(cpu_self);
 	} else {
 		_Thread_Wait_release_default(thread, &lock_context);




More information about the vc mailing list