This shows the problem, but not the underlying cause: $ gdb bin/mir_test_reload_protobufGNU gdb (Ubuntu 7.11.90.20160906-0ubuntu1) 7.11.90.20160906-git Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: . For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from bin/mir_test_reload_protobuf...done. (gdb) b /home/alan/display_server/mir/tests/loader-tests/test_reload.c:36 No source file named /home/alan/display_server/mir/tests/loader-tests/test_reload.c. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (/home/alan/display_server/mir/tests/loader-tests/test_reload.c:36) pending. (gdb) r Starting program: /home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/mir_test_reload_protobuf [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". MIR_CLIENT_PLATFORM_PATH=/home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/../lib/client-modules/ MIR_SERVER_PLATFORM_PATH=/home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/../lib/server-modules/ LD_LIBRARY_PATH=/home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/../lib exec=/home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/mir_test_reload_protobuf.bin process 2335 is executing new program: /home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/mir_test_reload_protobuf.bin [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Breakpoint 1, main (argc=1, argv=0x7fffffffde58) at /home/alan/display_server/mir/tests/loader-tests/test_reload.c:36 36 dl = dlopen(libname, RTLD_NOW); (gdb) info share From To Syms Read Shared Object Library 0x00007ffff7dd8aa0 0x00007ffff7df6130 Yes /lib64/ld-linux-x86-64.so.2 0x00007ffff7bd4d80 0x00007ffff7bd598e Yes /lib/x86_64-linux-gnu/libdl.so.2 0x00007ffff79bba60 0x00007ffff79c8e01 Yes /lib/x86_64-linux-gnu/libpthread.so.0 0x00007ffff760e9c0 0x00007ffff775f0c3 Yes /lib/x86_64-linux-gnu/libc.so.6 (gdb) n 37 if (dl) (gdb) info share From To Syms Read Shared Object Library 0x00007ffff7dd8aa0 0x00007ffff7df6130 Yes /lib64/ld-linux-x86-64.so.2 0x00007ffff7bd4d80 0x00007ffff7bd598e Yes /lib/x86_64-linux-gnu/libdl.so.2 0x00007ffff79bba60 0x00007ffff79c8e01 Yes /lib/x86_64-linux-gnu/libpthread.so.0 0x00007ffff760e9c0 0x00007ffff775f0c3 Yes /lib/x86_64-linux-gnu/libc.so.6 0x00007ffff7360c60 0x00007ffff73c3e86 Yes /home/alan/.CLion2016.2/system/cmake/generated/mir-9ec817d/9ec817d/Debug/bin/../lib/libmirprotobuf.so.3 0x00007ffff710ddd0 0x00007ffff712a3c6 Yes /usr/local/lib/libprotobuf-lite.so.10 0x00007ffff6df8900 0x00007ffff6ea7c79 Yes (*) /usr/lib/x86_64-linux-gnu/libstdc++.so.6 0x00007ffff6b58a90 0x00007ffff6b688e5 Yes (*) /lib/x86_64-linux-gnu/libgcc_s.so.1 0x00007ffff6852710 0x00007ffff68c3bfa Yes /lib/x86_64-linux-gnu/libm.so.6 (*): Shared library is missing debugging information. (gdb) c Continuing. [0] dlopen `libmirprotobuf.so.3' = 0x5555557564c0 Breakpoint 1, main (argc=1, argv=0x7fffffffde58) at /home/alan/display_server/mir/tests/loader-tests/test_reload.c:36 36 dl = dlopen(libname, RTLD_NOW); (gdb) info share From To Syms Read Shared Object Library 0x00007ffff7dd8aa0 0x00007ffff7df6130 Yes /lib64/ld-linux-x86-64.so.2 0x00007ffff7bd4d80 0x00007ffff7bd598e Yes /lib/x86_64-linux-gnu/libdl.so.2 0x00007ffff79bba60 0x00007ffff79c8e01 Yes /lib/x86_64-linux-gnu/libpthread.so.0 0x00007ffff760e9c0 0x00007ffff775f0c3 Yes /lib/x86_64-linux-gnu/libc.so.6 0x00007ffff710ddd0 0x00007ffff712a3c6 Yes /usr/local/lib/libprotobuf-lite.so.10 0x00007ffff6df8900 0x00007ffff6ea7c79 Yes (*) /usr/lib/x86_64-linux-gnu/libstdc++.so.6 0x00007ffff6b58a90 0x00007ffff6b688e5 Yes (*) /lib/x86_64-linux-gnu/libgcc_s.so.1 0x00007ffff6852710 0x00007ffff68c3bfa Yes /lib/x86_64-linux-gnu/libm.so.6 (*): Shared library is missing debugging information. With protobuf-2.6.1 the libprotobuf-lite library is unloaded at this point. (And that means that the next iteration of this loop repeats the "one time" initialization - the patch in #18 works around it.) I've yet to find the reason that the library remains resident when its only dependent is unloaded.