C Client Crash After 4.2.0


#1

Hi, I make a performance test with my program which uses the interface ‘aerospike_batch_read_async’.When the program is overload, it crash at ‘as_event_connection_timeout’, because the param ‘as_event_connection* conn’ of ‘as_event_command* cmd’ is an uninitialized value.

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff29f7700 (LWP 18729)]
as_event_total_timeout (cmd=0x7fffe2313540) at src/main/aerospike/as_event.c:470
470 as_event_connection_timeout(cmd, pool);
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.192.el6.x86_64 keyutils-libs-1.4-5.el6.x86_64 krb5-libs-1.10.3-57.el6.x86_64 libcom_err-1.41.12-22.el6.x86_64 libgcc-4.4.7-18.el6.x86_64 libselinux-2.0.94-7.el6.x86_64 libstdc++-4.4.7-18.el6.x86_64 openssl-1.0.1e-48.el6_8.3.x86_64 zlib-1.2.3-29.el6.x86_64
(gdb) bt
#0 as_event_total_timeout (cmd=0x7fffe2313540) at src/main/aerospike/as_event.c:470
#1 0x000000000053bbfe in uv__run_timers (loop=0x7ffff3f7bc80) at src/unix/timer.c:165
#2 0x0000000000534982 in uv_run (loop=0x7ffff3f7bc80, mode=UV_RUN_DEFAULT) at src/unix/core.c:342
#3 0x00000000004dba59 in as_uv_worker (udata=0x7fffffffd2c0) at src/main/aerospike/as_event_uv.c:162
#4 0x00007ffff5cd7aa1 in start_thread () from /lib64/libpthread.so.0
#5 0x00007ffff5284aad in clone () from /lib64/libc.so.6
(gdb) p *cmd
$1 = {timer = {data = 0x7fffe2313540, loop = 0x7ffff3f7bc80, type = UV_TIMER, close_cb = 0, handle_queue = {0x7fffe23175a0, 0x7fffe230f520}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 8192, timer_cb = 0x4dd108 , heap_node = {0x7fffe23175e8, 0x7fffe1d1e1e8, 0x0}, timeout = 29464574915, repeat = 0, start_id = 580}, total_deadline = 29464574922, socket_timeout = 0, max_retries = 2, iteration = 2, replica = AS_POLICY_REPLICA_MASTER, event_loop = 0x7ffff3fcfd30, conn = 0x0, cluster = 0x7ffff3f6be40, node = 0x7ffff3fcbe80, partition = 0x0, udata = 0x7fffe20d9590, parse_results = 0x4ccf4c , pipe_listener = 0, pipe_link = {next = 0x0, prev = 0x0}, buf = 0x7fffe23136b1 "", write_offset = 288, write_len = 81, read_capacity = 7823, len = 81, pos = 0, type = 3 '\003', state = 1 '\001', flags = 5 '\005', deserialize = true}

Before 4.1.10, this problem hasn’t happened. Thanks.


#2

We have confirmed that a command can timeout when a connection is not initialized. We are working on a fix.

The workaround is to disable internal retries. Set max_retries = 0 for all of your policies.


#3

C client 4.3.2 should fix your problem.

https://www.aerospike.com/download/client/c/4.3.2/