Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47d6b083 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds
Browse files

[PATCH] posix-timers: fix task accounting



Make sure we release the task struct properly when releasing pending
timers.

release_task() does write_lock_irq(&tasklist_lock), so it can't race
with run_posix_cpu_timers() on any cpu.

Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6ce96917
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -424,6 +424,7 @@ static void cleanup_timers(struct list_head *head,
	cputime_t ptime = cputime_add(utime, stime);

	list_for_each_entry_safe(timer, next, head, entry) {
		put_task_struct(timer->task);
		timer->task = NULL;
		list_del_init(&timer->entry);
		if (cputime_lt(timer->expires.cpu, ptime)) {
@@ -436,6 +437,7 @@ static void cleanup_timers(struct list_head *head,

	++head;
	list_for_each_entry_safe(timer, next, head, entry) {
		put_task_struct(timer->task);
		timer->task = NULL;
		list_del_init(&timer->entry);
		if (cputime_lt(timer->expires.cpu, utime)) {
@@ -448,6 +450,7 @@ static void cleanup_timers(struct list_head *head,

	++head;
	list_for_each_entry_safe(timer, next, head, entry) {
		put_task_struct(timer->task);
		timer->task = NULL;
		list_del_init(&timer->entry);
		if (timer->expires.sched < sched_time) {