https://bugs.kde.org/show_bug.cgi?id=409606

--- Comment #5 from Milian Wolff <m...@milianw.de> ---
Hm yes indeed, I just tested it and I can really intercept it - awesome! I'll
definitely want to add that in the future then. I'm not yet sure how to do this
properly though, as intercepting mmap may still need some special handling,
otherwise it's too easy to deadlock, cf.:

```
(gdb) bt
#0  0x00007f98519df41f in __lll_lock_wait () from /usr/lib/libpthread.so.0
#1  0x00007f98519d7ea3 in pthread_mutex_lock () from /usr/lib/libpthread.so.0
#2  0x00007f9851c16b21 in __gthread_mutex_lock (__mutex=0x7f9851c1c740
<(anonymous namespace)::HeapTrack::s_lock>)
    at /usr/include/c++/9.2.0/x86_64-pc-linux-gnu/bits/gthr-default.h:749
#3  std::mutex::lock (this=0x7f9851c1c740 <(anonymous
namespace)::HeapTrack::s_lock>) at /usr/include/c++/9.2.0/bits/std_mutex.h:100
#4  (anonymous namespace)::HeapTrack::HeapTrack (this=<synthetic pointer>) at
/home/milian/projects/src/heaptrack/src/track/libheaptrack.cpp:235
#5  heaptrack_init (outputFileName=0x0, 
    initBeforeCallback=initBeforeCallback@entry=0x7f9851c14000 <(anonymous
namespace)::hooks::<lambda()>::_FUN(void)>, 
    initAfterCallback=initAfterCallback@entry=0x0,
stopCallback=stopCallback@entry=0x0)
    at /home/milian/projects/src/heaptrack/src/track/libheaptrack.cpp:689
#6  0x00007f9851c13f77 in (anonymous namespace)::hooks::init () at
/home/milian/projects/src/heaptrack/src/track/heaptrack_preload.cpp:147
#7  0x00007f9851c145d5 in mmap (addr=addr@entry=0x0, length=length@entry=4096,
prot=prot@entry=3, flags=flags@entry=34, fd=fd@entry=-1, 
    offset=offset@entry=0) at
/home/milian/projects/src/heaptrack/src/track/heaptrack_preload.cpp:336
#8  0x00007f98519aca5a in expand (pool=pool@entry=0x7f98519cbb60
<dwarf_reg_state_pool>)
    at /home/milian/projects/src/libunwind/src/mi/mempool.c:111
#9  0x00007f98519acbd6 in _UIx86_64__mempool_init
(pool=pool@entry=0x7f98519cbb60 <dwarf_reg_state_pool>,
obj_size=obj_size@entry=192, 
    reserve=<optimized out>, reserve@entry=0) at
/home/milian/projects/src/libunwind/src/mi/mempool.c:150
#10 0x00007f98519b9617 in _Ux86_64_dwarf_init () at
/home/milian/projects/src/libunwind/src/dwarf/global.c:34
#11 0x00007f98519adbf8 in _ULx86_64_init () at
/home/milian/projects/src/libunwind/src/x86_64/Gglobal.c:91
#12 0x00007f98519ad96a in _ULx86_64_set_caching_policy (as=0x7f98519c5340
<local_addr_space>, policy=policy@entry=UNW_CACHE_PER_THREAD)
    at /home/milian/projects/src/libunwind/src/mi/Gset_caching_policy.c:32
#13 0x00007f9851c14755 in (anonymous
namespace)::HeapTrack::<lambda()>::operator() (__closure=<optimized out>)
    at /home/milian/projects/src/heaptrack/src/track/libheaptrack.cpp:265
#14 std::__invoke_impl<void, (anonymous namespace)::HeapTrack::initialize(char
const*, heaptrack_callback_t, heaptrack_callback_initialized_t,
heaptrack_callback_t)::<lambda()> > (__f=...) at
/usr/include/c++/9.2.0/bits/invoke.h:60
#15 std::__invoke<(anonymous namespace)::HeapTrack::initialize(char const*,
heaptrack_callback_t, heaptrack_callback_initialized_t, heaptrack_cal--Type
<RET> for more, q to quit, c to continue without paging--
lback_t)::<lambda()> > (__fn=...) at /usr/include/c++/9.2.0/bits/invoke.h:95
#16 std::<lambda()>::operator() (this=<optimized out>) at
/usr/include/c++/9.2.0/mutex:671
#17 std::<lambda()>::operator() (this=0x0) at /usr/include/c++/9.2.0/mutex:676
#18 std::<lambda()>::_FUN(void) () at /usr/include/c++/9.2.0/mutex:676
#19 0x00007f98519dd87f in __pthread_once_slow () from /usr/lib/libpthread.so.0
#20 0x00007f9851c16beb in __gthread_once (__func=<optimized out>, 
    __once=0x7f9851c1c768 <(anonymous namespace)::HeapTrack::initialize(char
const*, void (*)(), void (*)(LineWriter&), void (*)())::once>)
    at /usr/include/c++/9.2.0/x86_64-pc-linux-gnu/bits/gthr-default.h:700
#21 std::call_once<(anonymous namespace)::HeapTrack::initialize(char const*,
heaptrack_callback_t, heaptrack_callback_initialized_t,
heaptrack_callback_t)::<lambda()> > (__once=..., __f=...) at
/usr/include/c++/9.2.0/mutex:683
#22 (anonymous namespace)::HeapTrack::initialize (this=<synthetic pointer>,
stopCallback=0x0, initAfterCallback=0x0, 
    initBeforeCallback=0x7f9851c14000 <(anonymous
namespace)::hooks::<lambda()>::_FUN(void)>, 
    fileName=0x7ffd605db4be "/tmp/heaptrack_fifo824597") at
/home/milian/projects/src/heaptrack/src/track/libheaptrack.cpp:262
#23 heaptrack_init (outputFileName=0x7ffd605db4be "/tmp/heaptrack_fifo824597", 
    initBeforeCallback=initBeforeCallback@entry=0x7f9851c14000 <(anonymous
namespace)::hooks::<lambda()>::_FUN(void)>, 
    initAfterCallback=initAfterCallback@entry=0x0,
stopCallback=stopCallback@entry=0x0)
    at /home/milian/projects/src/heaptrack/src/track/libheaptrack.cpp:690
#24 0x00007f9851c13f77 in (anonymous namespace)::hooks::init () at
/home/milian/projects/src/heaptrack/src/track/heaptrack_preload.cpp:147
#25 0x00007f9851c142ed in malloc (size=size@entry=72704) at
/home/milian/projects/src/heaptrack/src/track/heaptrack_preload.cpp:181
#26 0x00007f9851852c8b in (anonymous namespace)::pool::pool
(this=0x7f9851999240 <(anonymous namespace)::emergency_pool>)
    at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_alloc.cc:123
#27 __static_initialization_and_destruction_0 (__priority=65535,
__initialize_p=1) at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_alloc.cc:262
#28 _GLOBAL__sub_I_eh_alloc.cc(void) () at
/build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_alloc.cc:338
#29 0x00007f9851c2f72a in call_init.part () from /lib64/ld-linux-x86-64.so.2
#30 0x00007f9851c2f831 in _dl_init () from /lib64/ld-linux-x86-64.so.2
#31 0x00007f9851c2113a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
--Type <RET> for more, q to quit, c to continue without paging--
#32 0x0000000000000001 in ?? ()
#33 0x00007ffd605db4a5 in ?? ()
#34 0x0000000000000000 in ?? ()
```

but I'm sure one can find a way to resolve this.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to