Fixed bug with the recursive trace

In gcc, `is_locked_by_me()` is not reliable (it was giving
false-positives). To avoid the trace() recursion a variable called
`is_busy` was created.

Once trace() starts working in a pointer, it will set is_busy for true.
If is_busy was already true, trace() will just ignore the ptr. This is
correct because if trace() acquired the mutex AND is_busy is true, it
could only be a call from the same thread, i.e. a recursive call.