----- Original Message -----
On Fri, 2012-03-23 at 12:14 -0400, Dave Anderson wrote:
> Download from:
http://people.redhat.com/anderson
>
> Changelog:
>
> - Enhancement to the "foreach" command which adds a new
"state"
> task-indentifier argument that filters tasks by their task state.
> The state argument may be any of the task states displayed by
> the "ps" command: RU, IN, UN, ST, ZO, SW or DE.
> (rabin(a)rab.in, anderson(a)redhat.com)
>
This doesn't work for RU on my system because _RUNNING_ is 0x0 and (0x0
& 0x0) is 0x0 in this line in task.c:
5603 if ((fd->flags & FOREACH_STATE) &&
!(task_state(tc->task) & fd->state))
5604 continue;
If I change '&' to '==', it works, but I'm not sure if
task_state(tc->task) is restricted
to a single flag. Might need to check both, maybe?
Yeah, it can be multiple bits -- except in the case of TASK_RUNNING.
When I did the "ps" ST display overhaul to handle multiple bits being
set, I went back and changed Rabin's "foreach" patch, which originally
used "==" and therefore didn't account for multiple bits being set.
But I forgot to make a special case for TASK_RUNNING in that case.
My bad...
So it would have to be something like:
if (fd->flags & FOREACH_STATE) {
if ((fd->state == _RUNNING_) {
if (task_state(tc->task) != _RUNNING_))
continue;
} else if (!(task_state(tc->task) & fd->state))
continue;:
}
Dave