I have a quick question that hopefully those more knowledgeable in
linux can help me with.

I have an application with two threads on linux which I was testing
under valgrind. We have a strange memory behavior that is leading to
an internal assert terminating the application, hence the
investigation. After running the application, I have many, many
errors, (invalid reads and writes), which all follow a similar
pattern:

Invalid read/write of size 4:
    at thread1_func()
    at thread1_func1()
    ...
Address 0x##### is ##### bytes inside a block of size #### free'd
    free()
    myAllocator::~myAllocator()
    __run_exit_handlers
    exit
    terminate_handler_sp
    thread2_func()
    thread2_func1()
    ...

The call stack from the free() stack is obviously from the second
thread (NOT the one that started the error, oddly enough), while the
invalid read is from the first thread.

Anyway, the way I'm interpreting this is that the first thread starts
the abort process. The second thread catches the signal and starts
destroying the static objects, which frees memory, and somehow the
first thread keeps going and causes all sorts of spurious memory
errors?

I guess another possibility is that at some point the second thread
really did tear everything down at some point and the first thread
really did just charge ahead not knowing about it. My linux-fu is not
at expert-level yet (Just a yellow-belt, really), so I'd appreciate
any thoughts on what could be going on and how to continue with the
debugging process.

Dalon


_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to