Hi Ronald & utrace developers....

I am back...

I am upgrading my kmview support and I have stepped into a clear bug.

in utrace_reap:

----------
list_for_each_entry_safe(engine, next, &utrace->attached, entry) {
    ops = engine->ops;
    engine->ops = NULL;
    engine->flags = 0;
    list_move(&engine->entry, &detached);

    /*
     * If it didn't need a callback, we don't need to drop
     * the lock.  Now nothing else refers to this engine.
     */
    if (!(engine->flags & UTRACE_EVENT(REAP)))
      continue;
------------

The code following this 'if' is never executed (i.e. the reap callback never
called).
In fact it is impossible for (engine->flags & UTRACE_EVENT(REAP)) to be
true given that a few statement above engine->flags has been set to 0!

To fix the bug:
clean all the events but reap:
engine->flags &= UTRACE_EVENT(REAP);
or save the flag in a temporary var before cleaning it, as you do for 
engine->ops.

ciao
        renzo

Reply via email to