[Crash-utility] 6.0.5 foreach problem with state RU

Dave Anderson anderson at redhat.com
Tue Mar 27 13:24:37 UTC 2012



----- 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 at rab.in, anderson at 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




More information about the Crash-utility mailing list