Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Mar 2000 06:57:54 -0500 (EST)
From:      Daniel Eischen <eischen@vigrid.com>
To:        John Polstra <jdp@polstra.com>
Cc:        current@freebsd.org
Subject:   Re: pthread_{suspend,resume}_np broken?
Message-ID:  <Pine.SUN.3.91.1000301064035.7639A-100000@pcnet1.pcnet.com>
In-Reply-To: <200003010447.UAA74251@vashon.polstra.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 29 Feb 2000, John Polstra wrote:

> In article <Pine.SUN.3.91.1000229224700.20669A@pcnet1.pcnet.com>,
> Daniel Eischen  <eischen@vigrid.com> wrote:
> > On Tue, 29 Feb 2000, John Polstra wrote:
> > 
> > > Shouldn't the test against PS_SUSPENDED be "==" instead of "!="?
> > 
> > Yes, it should be "==" instead of "!=".
> > 
> > Go ahead and fix it if you want :-)
> 
> Thanks.  I'll ask Jordan if I may commit the fix.
> 
> What about the other part of my question?  I still don't understand
> why in my test program pthread_suspend_np() isn't suspending the
> thread.  I think it's a separate bug from the pthread_resume_np() bug.

Sorry, it was very late here and I missed that part.

I see the problem.  pthread_suspend_np is broke in that it only will
work if the thread is running (PS_RUNNING).  Your program is always
trying to suspend a thread that is sleeping (PS_SLEEP_WAIT) so changing
the state with PTHREAD_NEW_STATE fails.

The fix isn't as easy as just correctly setting the threads state.
Potentially, the suspended thread could be waiting on a mutex or
condition variable and be in another queue.  The correct fix is
probably to save the threads old state and then set the threads state
to PS_SUSPENDED.  Resuming should restore the saved thread state.

I'll see if I can come up with a correct fix for this.

Dan Eischen
eischen@vigrid.com


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SUN.3.91.1000301064035.7639A-100000>