Date: Tue, 11 Dec 2001 23:43:42 -0800 From: Bill Huey <billh@gnuppy.monkey.org> To: Daniel Eischen <eischen@pcnet1.pcnet.com> Cc: Bill Huey <billh@gnuppy.monkey.org>, Nate Williams <nate@yogotech.com>, absinthe@pobox.com, shanon loveridge <shanon_loveridge@yahoo.co.uk>, freebsd-java@FreeBSD.ORG Subject: Re: Pthreads bug fix [was Re: jdk1.3.1p5] Message-ID: <20011212074342.GB4677@gnuppy> In-Reply-To: <Pine.SUN.3.91.1011211224444.6320B-100000@pcnet1.pcnet.com> References: <20011212012218.GA3199@gnuppy> <Pine.SUN.3.91.1011211224444.6320B-100000@pcnet1.pcnet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Dec 11, 2001 at 11:06:55PM -0500, Daniel Eischen wrote:
> So it looks to me like the problem is that the scheduler is
> waking up the thread and making it runnable before it is
> resumed. Is that the case? Does the following look like
> it might solve the problem?
>
> Index: uthread_kern.c
> ===================================================================
> RCS file: /opt/d/CVS/src/lib/libc_r/uthread/uthread_kern.c,v
> retrieving revision 1.38
> diff -u -r1.38 uthread_kern.c
> --- uthread_kern.c 4 May 2001 20:37:07 -0000 1.38
> +++ uthread_kern.c 12 Dec 2001 04:15:35 -0000
> @@ -387,6 +387,10 @@
> ((pthread->wakeup_time.tv_sec == ts.tv_sec) &&
> (pthread->wakeup_time.tv_nsec <= ts.tv_nsec)))) {
> switch (pthread->state) {
> + case PS_SUSPENDED:
> + PTHREAD_WAITQ_REMOVE(pthread);
> + pthread->suspended = SUSP_YES;
> + break;
> case PS_POLL_WAIT:
> case PS_SELECT_WAIT:
> /* Return zero file descriptors ready: */
> Dan Eischen
[/me thinks]
...
Hmmm, whether this solves the problem and keeps it marked as PS_SUSPENDED,
I don't really know since I'm pretty much a neophyte at pthreads internals,
but I'm hoping that I articulate the problem clear enough that you can
find a more direct fix for this problem.
The thing that I don't see in that logic is how it can restore the
PS_COND_WAIT state before the suspend attempt. I'd normally think that
"thread->suspended = SUSP_COND_WAIT" would be needed so that it can be
remarked PS_COND_WAIT when a resume operation is requested. I don't see
how it can be put into that state in the other parts of the pthreads library
or if that's a relevant consideration.
bill
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-java" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011212074342.GB4677>
