syslog-ng crashes with ivykis 0.42.1
Closed this issue · 1 comments
I am trying to increase the version of ivykis in syslog-ng, but I ran into a crash. The exact root cause is not known, but I can steadily reproduce it by continuously reloading syslog-ng under load. Idle syslog-ng or without reload seems to work.
I did bisect on the ivykis source, which led me to this commit:
0985782: iv_event: Optimize out one mutex lock/unlock pair per event delivery iteration.
When I revert this commit on the top of 0.42.1, the crash disappears.
The commit (0985782) has two parts:
- an early return when the list of pending events is empty
- a seemingly equivalent transformation on the exit strategy of the while cycle that executes the pending events.
It seems only the second one causes the problem: when I revert only the second part ("int empty_now" related) but leaving the early return in, the crash also disappears.
Attached the diff I used that solves the crash:
revert_empty_now.diff.zip
Probably the empty_now variable is invalidated between the initialization and the usage after the handler, which did not cause problem in the previous version: it happend once in the condition of while(), during holding a lock.
When crash, I have the following backtrace.
(gdb) bt full
#0 0x00007ffeb23f6b10 in ?? ()
No symbol table info available.
#1 0x00007f9c3cc2a67a in __iv_event_run_pending_events (_st=0x1e8f420) at ../../../../syslog-ng/lib/ivykis/src/iv_event.c:56
ie = 0x7ffeb23f6af8
empty_now = 1
st = 0x1e8f420
events = {next = 0x7ffeb23f6b10, prev = 0x7ffeb23f6b10}
#2 0x00007f9c3cc2a78b in iv_event_run_pending_events () at ../../../../syslog-ng/lib/ivykis/src/iv_event.c:88
No locals.
#3 0x00007f9c3cc31235 in iv_fd_epoll_timerfd_poll (st=0x1e8f420, active=0x7ffeb23f6c70, abs=0x0)
at ../../../../syslog-ng/lib/ivykis/src/iv_fd_epoll.c:484
run_timers = 0
batch = {{events = 4, data = {ptr = 0x1ed6b38, fd = 32336696, u32 = 32336696, u64 = 32336696}}, {events = 1, data = {
ptr = 0x1e8f420, fd = 32044064, u32 = 32044064, u64 = 32044064}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0,
u64 = 0}}, {events = 0, data = {ptr = 0x7f9c3cbdaa0d <_request_all_threads_to_exit+76>, fd = 1019062797,
u32 = 1019062797, u64 = 140309010688525}}, {events = 2990500768, data = {ptr = 0x3cbdaf3c00007ffe, fd = 32766,
u32 = 32766, u64 = 4376847085106921470}}, {events = 32668, data = {ptr = 0x7f9c3ce7ad00 <main_loop>, fd = 1021816064,
u32 = 1021816064, u64 = 140309013441792}}, {events = 1019057446, data = {ptr = 0xb23f6bd000007f9c, fd = 32668,
u32 = 32668, u64 = 12844103203381346204}}, {events = 32766, data = {
ptr = 0x7f9c3cbd994d <main_loop_reload_config_initiate+362>, fd = 1019058509, u32 = 1019058509, u64 = 140309010684237}}}
ret = 2
run_events = 1
i = 2
#4 0x00007f9c3cc2d2fa in iv_fd_poll_and_run (st=0x1e8f420, abs=0x1ee6138) at ../../../../syslog-ng/lib/ivykis/src/iv_fd.c:202
active = {next = 0x1ed6b60, prev = 0x1ed6b60}
run_timers = 1528
#5 0x00007f9c3cc2e781 in iv_main () at ../../../../syslog-ng/lib/ivykis/src/iv_main_posix.c:112
_abs = {tv_sec = 140731888921808, tv_nsec = 140309010719332}
abs = 0x1ee6138
st = 0x1e8f420
run_timers = 0
#6 0x00007f9c3cbda01f in main_loop_run (self=0x7f9c3ce7ad00 <main_loop>) at ../syslog-ng/lib/mainloop.c:531
No locals.
#7 0x0000000000401de4 in main (argc=1, argv=0x7ffeb23f6e38) at ../syslog-ng/syslog-ng/main.c:303
Could you help me with this issue?