Support #682

Add pthread_mutexattr_setrobust for emq support to avoid stalling on process crash

Added by Madars almost 3 years ago.

Status:NewStart date:05/13/2021
Priority:Normal (Code 4)Due date:
Assignee:-% Done:

0%

Category:-
Target version:-

Description

Thought robust mutexes are not available on Macos, yet for compliance we might want to add this functionality to avoid system stalling at crashes. For example emq testing on ubuntu18 cause to lock on:

(gdb) where
#0  0x00007f39eb710ad3 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x7f39e5ff40d0) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  __pthread_cond_wait_common (abstime=0x0, mutex=0x7f39e5ff4080, cond=0x7f39e5ff40a8) at pthread_cond_wait.c:502
#2  __pthread_cond_wait (cond=cond@entry=0x7f39e5ff40a8, mutex=mutex@entry=0x7f39e5ff4080) at pthread_cond_wait.c:655
#3  0x00007f39ebc59ca8 in emq_timedreceive (emqd=emqd@entry=0x612000001858, ptr=ptr@entry=0x7f39e5ef2818 '\276' <repeats 200 times>..., maxlen=maxlen@entry=1049616, 
    priop=priop@entry=0x7ffe5242f7e0, __abs_timeout=__abs_timeout@entry=0x0) at /home/user1/endurox/libnstd/sys_emqueue.c:799
#4  0x00007f39ebc5c7fa in emq_receive (emqd=emqd@entry=0x612000001858, ptr=ptr@entry=0x7f39e5ef2818 '\276' <repeats 200 times>..., maxlen=maxlen@entry=1049616, priop=priop@entry=0x7ffe5242f7e0)
    at /home/user1/endurox/libnstd/sys_emqueue.c:1085
#5  0x00007f39ebf858c4 in ndrx_generic_q_receive (q_descr=q_descr@entry=0x612000001858, q_str=q_str@entry=0x0, reply_q_attr=reply_q_attr@entry=0x0, 
    buf=buf@entry=0x7f39e5ef2818 '\276' <repeats 200 times>..., buf_max=<optimized out>, prio=prio@entry=0x7ffe5242f7e0, flags=<optimized out>) at /home/user1/endurox/libatmi/atmiutils.c:515
#6  0x00007f39ebf87d0f in cmd_generic_call_2 (ndrxd_cmd=<optimized out>, msg_src=<optimized out>, msg_type=<optimized out>, call=<optimized out>, call_size=<optimized out>, 
    reply_q=<optimized out>, reply_queue=<optimized out>, admin_queue=<optimized out>, admin_q_str=<optimized out>, argc=<optimized out>, argv=<optimized out>, p_have_next=<optimized out>, 
    p_rsp_process=<optimized out>, p_put_output=<optimized out>, need_reply=<optimized out>, reply_only=<optimized out>, rply_buf_out=<optimized out>, rply_buf_out_len=<optimized out>, 
    flags=<optimized out>, p_rply_request=<optimized out>) at /home/user1/endurox/libatmi/atmiutils.c:699
#7  0x00007f39ebf88e06 in cmd_generic_listcall (ndrxd_cmd=<optimized out>, msg_src=msg_src@entry=1, msg_type=msg_type@entry=0, call=call@entry=0x7ffe524303e0, call_size=call_size@entry=216, 
    reply_q=<optimized out>, reply_queue=0x612000001858, admin_queue=0xffffffffffffffff, admin_q_str=0x55f1870e4048 <G_config+4104> "/dom1,sys,bg,ndrxd", argc=2, argv=0x55f1870e2f80 <G_cmd_argv>, 
    p_have_next=0x7ffe52430780, arglist=0x55f1870bd020 <G_call_args>, reply_only=0, flags=32) at /home/user1/endurox/libatmi/atmiutils.c:981
#8  0x000055f186e3ba82 in cmd_stop (p_cmd_map=<optimized out>, argc=<optimized out>, argv=<optimized out>, p_have_next=<optimized out>) at /home/user1/endurox/xadmin/cmd_startstop.c:367
#9  0x000055f186e32526 in process_command_buffer (p_have_next=0x7ffe52430780) at /home/user1/endurox/xadmin/xadmin.c:988
#10 0x000055f186e3435c in main (argc=<optimized out>, argv=<optimized out>) at /home/user1/endurox/xadmin/xadmin.c:1272
(gdb) 

Also available in: Atom PDF