mtrace perl tool reporting "+ 0x000001003c393dc0 Alloc 3183 duplicate: 0x3fffaa678d08 /lib64/libntirpc.so.1.3:[0x3fffaa678d08]"

Carlos O'Donell carlos@redhat.com
Thu Feb 21 20:57:00 GMT 2019


On 2/21/19 3:34 PM, Malahal Naineni wrote:
>>> The serializing lock in all the tr_*hook functions should ensure that you see the correct order.
> 
> Looked at the tr_freehook() source. It changes __free_hook just before
> calling real free(). So if 2 threads call free() at the same time, one
> free() may call the tr_freehook() and this will acquire a lock and
> change the __free_hook to tr_old_free_hook which is NULL. The second
> thread's free() call may see this NULL hook and never really logs
> anything to the trace file. I think mtrace() hooks don't work with
> multithreaded application, pretty useless in multithreaded
> applications. Am I wrong?

Ugh, sorry, I forgot all about this code.

You are correct.

And `info libc "Tracing Malloc"` shows that mtrace() is MT-Unsafe
(harmonized info is in `man mtrace` which shows MT-unsafe).

DJ, Florian, and I wrote a thread-safe tracer that we used for
the tracing and simulation work we presented in LPC 2016, but we
haven't merged it upstream into master yet.

I expect the new tracer to replace the old tracer and operate as
an interposed library, and be thread safe.

First I need to cleanup and remove the old hooks so core malloc
can run faster when not under trace.

Sorry for the confusion.

-- 
Cheers,
Carlos.



More information about the Libc-alpha mailing list