[PATCH] Collect processes in batches
Roland McGrath
roland at redhat.com
Tue Jun 15 18:55:38 UTC 2010
> The patch works like this: collect all waitable tracees, store them
> in a linked list, then traverse it and act on each tracee.
> Rinse, repeat.
I understand.
> This might work too. You are proposing to collect a waitable tracee,
> decide what to do with it, remember the action you want to do on it
> and store the tracee in a linked list, go back and collect next waitable
> tracee. When there is no more tracees, perform remembered actions.
Correct.
> Looks more complex because you need to store a bit of data (action you
> want to perform) with each remembered tracee, but it might work.
Obviously it can work, there is no "might" about it. I don't think it's
more complex than your plan. Either you have to record the signal you want
to pass to ptrace, or you have to record the wait result.
> In my algorithm, I never ever try to delete a tcb which is in the middle
> in the middle of the list of remembered tracees because I always process
> the list from the head. Deletion at the head is trivial.
I understand. However, instead you have a different kludge that IMHO is
far more confusing.
> I decided to deal with this problem simply by stashing out the pid
> and wait status in remembered_pid and remembered_status variables,
> process and flush the list I accumulated so far, then process
> another "list" of tracees which consists of only one tracee: the one
> whose status I saved in (remembered_pid, remembered_status) tuple.
I'm not entirely sure I understand how this works in all cases. But it
certainly seems like a strange kludge to me. Both the magic single global
store and the linear search on the pending list seem quite ugly.
> In my code this is not necessary since it always processes tracees
> at the head of the collected list, thus any deletion will also happen
> at the head.
But instead you have the kludgey second linear search.
Storing a state bit is obviously better than that.
> But it can be done your way too.
I'd like to see an implementation along the lines I described.
IMHO it is far easier to follow such code than what you have done.
I think there are other (vague) advantages in how the control flow
scales when there are many threads reporting, too.
Thanks,
Roland
More information about the Strace-devel
mailing list