Problem when suspending a task.
Nick Thomas
nick.thomas at pixsan.com
Thu Jan 7 12:26:44 UTC 2010
> -----Original Message-----
> From: Leon Pollak [mailto:leonp at plris.com]
> Sent: 07 January 2010 10:27
> To: "Undisclosed.Recipients:"@plris.com
> Cc: Nick Thomas
> Subject: Re: Problem when suspending a task.
>
> On Thursday January 7 2010, Nick Thomas wrote:
> > I presume that it is safe for task 'X' to suspend task 'Y' when 'Y'
> is
> > asleep, or waiting on a message Q.
> > And possibly when waiting on a semaphore.
> > So, is it possible to obtain the state of the task to be suspended,
> > and if it's in one of those states then I can suspend it.
> > I see that the task state is listed in the monitor 'task' command,
> but
> > this code is in RTEMS, and I can't see an obvious rtems_task_xxx API
> > call to obtain this info. Is there one?
> Yes, this may be a way, although too complicated.
>
> May be you will consider the simpler decision: when you want to suspend
> from task A task B set some flag variable in A, while B will test this
> flag and suspend itself when not in a dangerous region.
OK, I understand that. And it seems like the best approach.
But, in an effort to not disrupt code common with other non-rtems projects,
I don't want to mess about with the tasks code too much. And there are lots
of them.
But, the OS API is abstracted, so if I can do it with my initial method then
it won't impact on other projects/products at all.
I have seen the use of rtems_iterate_over_all_threads API, and this appears
to work well enough for me.
I just need to be sure that I can suspend the task when it is in a 'safe'
state.
I have tested the two below, and that works. But, which of the others are
'safe'.
I notice that a task could be in the 'READY' state quite a lot, is it safe
to suspend the task when 'READY'?
#define STATES_READY 0x00000
#define STATES_DORMANT 0x00001
#define STATES_SUSPENDED 0x00002
#define STATES_TRANSIENT 0x00004
#define STATES_DELAYING 0x00008 /* OK */
#define STATES_WAITING_FOR_TIME 0x00010
#define STATES_WAITING_FOR_BUFFER 0x00020
#define STATES_WAITING_FOR_SEGMENT 0x00040
#define STATES_WAITING_FOR_MESSAGE 0x00080 /* OK */
#define STATES_WAITING_FOR_EVENT 0x00100
#define STATES_WAITING_FOR_SEMAPHORE 0x00200
#define STATES_WAITING_FOR_MUTEX 0x00400
#define STATES_WAITING_FOR_CONDITION_VARIABLE 0x00800
#define STATES_WAITING_FOR_JOIN_AT_EXIT 0x01000
#define STATES_WAITING_FOR_RPC_REPLY 0x02000
#define STATES_WAITING_FOR_PERIOD 0x04000
#define STATES_WAITING_FOR_SIGNAL 0x08000
>
> BR
> --
> Leon
> --
> Dr.Leon M.Pollak
> Director
> PLR Information Systems Ltd.
> Tel.:+972-98657670 | POB 8130, H'Aomanut 9,
> Fax.:+972-98657621 | Poleg Industrial Zone,
> Mob.:+972-544739246 | Netanya, 42160, Israel.
More information about the users
mailing list