it got more complicated as it progressed.
The bulk of the change was changing template_exprun so that it can take a
pid/eid as an alternative to eid/guid. This is a big convenience since its
easy to find the template from a running experiment, and it makes it
possible to invoke from the event scheduler, which has never heard of a
template before (and its not something I wanted to teach it about). Its
also easier on users.
Anyway, back to the stoprun event. You can now do this:
$ns at 100 "$ns stoprun"
tevc -e pid/eid now ns stoprun
You can add the -w option to wait for the completion event that is sent,
but this brings me to the glaring problems with this whole thing.
* First, the scheduler has to fire off the stoprun in the background,
since if it waits, we get deadlock. Why? Cause the implementation of
stoprun uses the event system (SNAPSHOT event, other things), and if
the scheduler is sitting and waiting, nothing happens.
Okay, the solution to this was to generate a COMPLETION event from
template_exprun once the stop operation is complete. This brings me
to the second problem ...
* Worse, is that the "ns" events that are sent to implement stoprun (like
snapshot) send their own completion events, and that confuses anyone
waiting on the original stoprun event (it returns early).
So what to do about this? There is a "token" field in the completion
event structure, which I presume is to allow you to match things up. But
there is no way to set this token using tevc (and then wait for it), and
besides, the event scheduler makes them up anyway and sticks them into
the event. So, the seed of a fix are already germinating in my mind, but
I wanted to get this commit in so that Mike would have fun reading this