2005-12-17 08:57:32

by HuaFeijun

[permalink] [raw]
Subject: stop threads failed!

I want to set threads's status to TASK_STOPPED by the following
code.The syslog has show this rourine has been executed,buf the thread
is still running.Who can tell me the reason?Thanks very much!
write_lock(&tasklist_lock);
do
{
printk("set threads stopped\n");
p->state = TASK_STOPPED;
} while ((p = next_thread(p)) != leader);
write_unlock(&tasklist_lock);
schedule();


2005-12-18 08:36:36

by Nauman Tahir

[permalink] [raw]
Subject: Re: stop threads failed!

On 12/17/05, Hua Feijun <[email protected]> wrote:
> I want to set threads's status to TASK_STOPPED by the following
> code.The syslog has show this rourine has been executed,buf the thread
> is still running.Who can tell me the reason?Thanks very much!
> write_lock(&tasklist_lock);
> do
> {
> printk("set threads stopped\n");
> p->state = TASK_STOPPED;
> } while ((p = next_thread(p)) != leader);
> write_unlock(&tasklist_lock);
> schedule();
> -

Have you specified the state TASK_INTERRUPTIBLE when you wake up the
thread? If not then do it to ba able to stop it later.
Anybody else correct me if I am wrong please
Regards
Nauman



> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2005-12-19 06:42:05

by Nauman Tahir

[permalink] [raw]
Subject: Re: stop threads failed!

On 12/18/05, Hua Feijun <[email protected]> wrote:
> Sorry, I couldn't describe the problem clearly.I means these threads
> did not go to sleep'in fact, they didn't stop runing.
>

Kindly also CC this to linux-kernel as well so that you have more
chances to get the solution of your problem.
It seems to me that you may have missed SIG_PENDING at the time when
you setup your thread. You will have to signal your thread to kill it.
Just setting up TASK STATE is not enough untill the process gets
scheduled or it gets the signal to kill itself explicitly


> 2005/12/18, Nauman Tahir <[email protected]>:
> > On 12/17/05, Hua Feijun <[email protected]> wrote:
> > > I want to set threads's status to TASK_STOPPED by the following
> > > code.The syslog has show this rourine has been executed,buf the thread
> > > is still running.Who can tell me the reason?Thanks very much!
> > > write_lock(&tasklist_lock);
> > > do
> > > {
> > > printk("set threads stopped\n");
> > > p->state = TASK_STOPPED;
> > > } while ((p = next_thread(p)) != leader);
> > > write_unlock(&tasklist_lock);
> > > schedule();
> > > -
> >
> > Have you specified the state TASK_INTERRUPTIBLE when you wake up the
> > thread? If not then do it to ba able to stop it later.
> > Anybody else correct me if I am wrong please