Debugging C++ code with atexit functions not called..

Willem Jan Withagen wjw at digiware.nl
Sat Feb 13 16:40:15 UTC 2016


Hi,

I've rn into a snag with porting some of the Ceph code....

PID file cleanup is done tru a atexit(pidfile_remove) setup.

Ive augmented the code and I see that the last thing the Linux version
does is actually execute the pidfile_remove code.

Whereas on FreeBSD this does not happen, the function does not seem to
be called at all..

The most obvious reason would be a crash of the program, but I don't get
a core file...

But to terminate the program I have to send it a 'kill TERM'.
Doing so under gdb gdb prints:
[New Thread 806c91800 (LWP 101527 sginal_handler)]
[New Thread 806c91400 (LWP 101519 ms_accepter)]
[New Thread 806c91000 (LWP 101512 ms_local)]
[New Thread 804dffc00 (LWP 101509 ms_dispatch)]
[New Thread 804dff800 (LWP 101489 safe_timer)]
[New Thread 804dff400 (LWP 100256 ms_reaper)]
[New Thread 804dff000 (LWP 100223 fn_monstore)]
[New Thread 804c15c00 (LWP 100206 admin_socket)]
[New Thread 804c15800 (LWP 100193 service)]
[New Thread 804c15400 (LWP 100167 log)]
Program received signal SIGTERM, Terminated.

[Switching to Thread 804c15000 (LWP 101222)]
0x00000008025ea1fc in _umtx_op_err () from /lib/libthr.so.3
(gdb)

Are these threads being fired up by the program upon receiving the
signal? Continuing gives me some of the programs output, and it prints
that it has received a signal.

The break on the pidfile_remove is not triggered. Suggesting that it
does not call the atexit-functions...

Suggestions on how to debug this further....

--WjW


More information about the freebsd-hackers mailing list