Bug 225863

Summary: Regression between 10 & 11, Freeswitch hangs when exiting
Product: Base System Reporter: emss
Component: threadsAssignee: freebsd-threads (Nobody) <threads>
Status: Closed DUPLICATE    
Severity: Affects Some People CC: emss
Priority: --- Keywords: regression
Version: 11.1-STABLE   
Hardware: amd64   
OS: Any   
Attachments:
Description Flags
backtrace
none
apr thread
none
switch_loadable_module.c
none
switch_core.c
none
switch.c
none
thread.c none

Description emss 2018-02-13 13:13:13 UTC
Created attachment 190575 [details]
backtrace

Freeswitch, a multiprotocol softswitch (http://freewitch.org) runs on
FreeBSD and a port is available (net/freeswitch/)

Freeswitch runs fine on any 10.x installation, issueing the shutdown
command from cli makes the application exit cleanly.

On any 11.x installation, issueing the shutdown command from cli makes
the application hang.

FreeBSD version is :
FreeBSD newsrv.interne.associated-bears.org 11.1-STABLE FreeBSD 11.1-STABLE #0 r327876M: Sat Jan 13 16:19:26 CET 2018     emss@newsrv.interne.associated-bears.org:/usr/obj/usr/src/sys/SE7525GP2  amd64

Generic or custom kernel behave the same.

On Freeswitch side, 1.6.19 (net/freeswitch) and also git branches master
& v1.6 show the same issue.

I've reproduced the issue on the latest v1.6, the backtrace of stuck
process shows the following :
#0  0x00000008030ea91c in _umtx_op_err () from /lib/libthr.so.3
#1  0x00000008030e6f97 in join_common (pthread=0x807ed7700, thread_return=0x7fffffffb658, abstime=0x0) at /usr/src/lib/libthr/thread/thr_join.c:125
#2  0x0000000800f01421 in apr_thread_join (retval=0x7fffffffb68c, thd=0x8059e9658) at threadproc/unix/thread.c:234
#3  0x0000000800cd889e in do_shutdown (module=0x2, shutdown=<optimized out>, unload=SWITCH_TRUE, fail_if_busy=(unknown: 1523667750), err=<optimized out>) at src/switch_loadable_module.c:2031
#4  0x0000000800cdb84a in switch_loadable_module_shutdown () at src/switch_loadable_module.c:2083
#5  0x0000000800c9d92c in switch_core_destroy () at src/switch_core.c:2940
#6  0x0000000000403b2b in main (argc=<optimized out>, argv=0x7fffffffe988) at src/switch.c:1210

It seems the issue lies in thread handling.

I've attached :
- the output of a Freeswitch related script used to gather relevant
  information.
- source files showing in bt

Thank for help.

Éric Masson
Comment 1 emss 2018-02-13 13:14:20 UTC
Created attachment 190576 [details]
apr thread
Comment 2 emss 2018-02-13 13:15:15 UTC
Created attachment 190577 [details]
switch_loadable_module.c
Comment 3 emss 2018-02-13 13:15:55 UTC
Created attachment 190578 [details]
switch_core.c
Comment 4 emss 2018-02-13 13:16:15 UTC
Created attachment 190579 [details]
switch.c
Comment 5 emss 2018-02-13 13:16:42 UTC
Created attachment 190580 [details]
thread.c
Comment 7 emss 2018-05-11 18:43:18 UTC

*** This bug has been marked as a duplicate of bug 227259 ***