<div dir="ltr">Hello,<div><br></div><div>I have a customized Kamailio (kamailio 5.1.1 (x86_64/linux)), <a href="https://www.kamailio.org/docs/modules/devel/modules/xhttp_prom.html" target="_blank">xHTTP_PROM</a> was released in the <a href="https://www.kamailio.org/w/kamailio-v5-3-0-release-notes/" target="_blank">5.3.0</a> version.</div><div><br></div><div>I'm trying to import the latest version of xhttp_prom to older Kamailio, but something goes wrong.</div><div>This is simple config for test:</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">log_stderror=yes<br></font><font face="monospace">listen=5060<br></font><font face="monospace">debug=2<br></font><font face="monospace">mpath="/home/devel/build_dir/build/lib64/kamailio/modules"</font><font face="monospace"><br></font><font face="monospace">loadmodule "tm.so"<br></font><font face="monospace">loadmodule "sl.so"<br></font><font face="monospace">loadmodule "xlog.so"<br></font><font face="monospace">loadmodule "pv.so"</font></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">disable_tcp=no<br></font><font face="monospace">tcp_accept_no_cl=yes</font><font face="monospace"><br></font><font face="monospace">loadmodule "xhttp.so"<br></font><font face="monospace">loadmodule "xhttp_prom.so"<br></font><font face="monospace">modparam("xhttp_prom", "xhttp_prom_stats", "all")</font><font face="monospace"><br></font><font face="monospace">route {<br></font><font face="monospace">  sl_send_reply("200", "OK");<br></font><font face="monospace">  exit;<br></font><font face="monospace">}</font><font face="monospace"><br></font><font face="monospace">event_route[xhttp:request] {<br></font><font face="monospace">  if (prom_check_uri()) {<br></font><font face="monospace">    prom_dispatch();<br></font><font face="monospace">  } else {<br></font><font face="monospace">    xhttp_reply("404", "Not Found", "text/plain", "Wrong URL $hu\n");<br></font><font face="monospace">  }<br></font><font face="monospace">}</font></blockquote><div><br></div><div>then I send HTTP request</div><div><font face="monospace">$ curl <a href="http://localhost:5060/metrics">http://localhost:5060/metrics</a><br></font></div><div><font face="arial, sans-serif">but get error:</font></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"> 6(110968) CRITICAL: <core> [core/pass_fd.c:277]: receive_fd(): EOF on 11<br></font><font face="monospace"> 0(110962) ALERT: <core> [main.c:746]: handle_sigs(): child process 110967 exited by a signal 11<br></font><font face="monospace"> 0(110962) ALERT: <core> [main.c:749]: handle_sigs(): core was generated<br></font><font face="monospace"> 0(110962) INFO: <core> [main.c:771]: handle_sigs(): terminating due to SIGCHLD</font></blockquote><div>note: for <a href="http://localhost:5060/test">http://localhost:5060/test</a> request I get the expected message "Wrong URL /test".</div><div><br></div><div>Backtrace for killed process</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">(gdb) c<br></font><font face="monospace">Continuing.</font><font face="monospace"><br></font><font face="monospace">Program received signal SIGSEGV, Segmentation fault.<br></font><font face="monospace">0x00007fefff3ff096 in atomic_cmpxchg_int (var=0x0, old=0, new_v=1) at ../../core/mem/../atomic/atomic_x86.h:224<br></font><font face="monospace">224      ATOMIC_FUNC_CMPXCHG(cmpxchg, "cmpxchgl %2, %1", int , int)<br></font><font face="monospace">(gdb) bt<br></font><font face="monospace">#0  0x00007fefff3ff096 in atomic_cmpxchg_int (var=0x0, old=0, new_v=1) at ../../core/mem/../atomic/atomic_x86.h:224<br></font><font face="monospace">#1  0x00007fefff3ff0e2 in futex_get (lock=0x0) at ../../core/mem/../futexlock.h:99<br></font><font face="monospace">#2  0x00007fefff4130bf in prom_metric_list_print (ctx=0x7fefff628da0 <ctx>) at prom_metric.c:1319<br></font><font face="monospace">#3  0x00007fefff416468 in prom_stats_get (ctx=0x7fefff628da0 <ctx>, stat=0x7fefff6281f0 <xhttp_prom_stats>) at prom.c:178<br></font><font face="monospace">#4  0x00007fefff3d4d10 in prom_send (ctx=0x7fefff628da0 <ctx>) at xhttp_prom.c:361<br></font><font face="monospace">#5  0x00007fefff3d5faf in ki_xhttp_prom_dispatch (msg=0x7ffecb730ee0) at xhttp_prom.c:418<br></font><font face="monospace">#6  0x00007fefff3d5feb in w_prom_dispatch (msg=0x7ffecb730ee0) at xhttp_prom.c:428<br></font><font face="monospace">#7  0x0000000000461dbe in do_action (h=0x7ffecb730e00, a=0x7ff0007c7b78, msg=0x7ffecb730ee0) at core/action.c:1067<br></font><font face="monospace">#8  0x000000000046e571 in run_actions (h=0x7ffecb730e00, a=0x7ff0007c7b78, msg=0x7ffecb730ee0) at core/action.c:1565<br></font><font face="monospace">#9  0x0000000000461d2d in do_action (h=0x7ffecb730e00, a=0x7ff0007ca628, msg=0x7ffecb730ee0) at core/action.c:1058<br></font><font face="monospace">#10 0x000000000046e571 in run_actions (h=0x7ffecb730e00, a=0x7ff0007c76f8, msg=0x7ffecb730ee0) at core/action.c:1565<br></font><font face="monospace">#11 0x00007fefff62f649 in xhttp_process_request (orig_msg=0x7ff0007ebbd8,<br> </font><font face="monospace">    new_buf=0x7ff0007cc280 "GET /metrics HTTP/1.1\r\nVia: SIP/2.0/TCP <a href="http://127.0.0.1:37000">127.0.0.1:37000</a>\r\nUser-Agent: curl/7.29.0\r\nHost: localhost:5060\r\nAccept: */*\r\n\r\n", new_len=119) at xhttp_mod.c:298<br></font><font face="monospace">#12 0x00007fefff630d78 in xhttp_handler (msg=0x7ff0007ebbd8) at xhttp_mod.c:385<br></font><font face="monospace">#13 0x0000000000520141 in nonsip_msg_run_hooks (msg=0x7ff0007ebbd8) at core/nonsip_hooks.c:111<br></font><font face="monospace">#14 0x000000000058cef1 in receive_msg (buf=0x7feffee65bb0 "GET /metrics HTTP/1.1\r\nUser-Agent: curl/7.29.0\r\nHost: localhost:5060\r\nAccept: */*\r\n\r\n", len=85, rcv_info=0x7feffee658d0)<br></font><font face="monospace">    at core/receive.c:216<br></font><font face="monospace">#15 0x000000000061233f in receive_tcp_msg (tcpbuf=0x7feffee65bb0 "GET /metrics HTTP/1.1\r\nUser-Agent: curl/7.29.0\r\nHost: localhost:5060\r\nAccept: */*\r\n\r\n", len=85, rcv_info=0x7feffee658d0,<br> </font><font face="monospace">    con=0x7feffee658b8) at core/tcp_read.c:1379<br></font><font face="monospace">#16 0x000000000061479e in tcp_read_req (con=0x7feffee658b8, bytes_read=0x7ffecb731c7c, read_flags=0x7ffecb731c78) at core/tcp_read.c:1611<br></font><font face="monospace">#17 0x00000000006174e9 in handle_io (fm=0x7ff0007d9720, events=1, idx=-1) at core/tcp_read.c:1785<br></font><font face="monospace">#18 0x00000000006069b4 in io_wait_loop_epoll (h=0xaa76c0 <io_w>, t=2, repeat=0) at core/io_wait.h:1065<br></font><font face="monospace">#19 0x00000000006194ff in tcp_receive_loop (unix_sock=14) at core/tcp_read.c:1955<br></font><font face="monospace">#20 0x00000000004f1a43 in tcp_init_children () at core/tcp_main.c:4853<br></font><font face="monospace">#21 0x0000000000423f99 in main_loop () at main.c:1716<br></font><font face="monospace">#22 0x000000000042a5ee in main (argc=9, argv=0x7ffecb7323b8) at main.c:2646<br></font><font face="monospace">(gdb)<br> </font><font face="monospace">(gdb) p 'prom_metric.c'::prom_lock<br></font><font face="monospace">$4 = (gen_lock_t *) 0x0</font></blockquote><div><br></div><div>If I understood correctly, the problem is in an uninitialized variable<br></div><div><font face="monospace">static gen_lock_t *prom_lock = NULL; /* Lock to protect Prometheus metrics. */</font><br></div><div><font face="monospace"><br></font></div><div><font face="monospace">So, is it possible to import </font>xHTTP_PROM to older Kamailio? I will be glad for any advice.</div><div><br></div><div>Thanks.</div></div>