Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 21 Jun 2015 06:31:11 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-threads@FreeBSD.org
Subject:   [Bug 200992] proccess won't die in thread_suspend_switch
Message-ID:  <bug-200992-16-aZQoU8wA1G@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-200992-16@https.bugs.freebsd.org/bugzilla/>
References:  <bug-200992-16@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=200992

Konstantin Belousov <kib@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rrs@FreeBSD.org

--- Comment #4 from Konstantin Belousov <kib@FreeBSD.org> ---
The issue is that callout_stop() call in the sleepq_check_timeout() returned
zero, which made the thread to (in)voluntarily relinguish the CPU.  But
apparently the thread sleep callout was not really run, which means that there
is nobody to make the thread runnable again.

The situation was already fixed once, it is the reason for the
CALLOUT_DFRMIGRATION existence.

For me, it looks as if the r278469 could be a cause.  The added block which
calculates the not_on_a_list means that sometimes previously pending callout is
not longer pending, but also that we return 0 in this case.I think that in case
not_on_a_list == 1, we _must_ return 1 from callout_stop().

I am attaching the non-tested proof of concept patch to try.

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-200992-16-aZQoU8wA1G>