Bug#935980: jackd2: Segfaults when qjackctl patchbay is activated

2019-08-31 Thread Bernhard Übelacker
Hello Chris,
I added it to your report guessing that it might be the issue
you observed. Now I see your setup is way more complex than my test.

To reveal some more information about your issue, you could install
the package systemd-coredump, then in the journal should a
backtrace appear after a crash. Additional a coredump should be
collected for later investigation (coredumpctl list).
More details might be available in the journal if dbgsym packages
for related binaries are installed (more details in [1]).

If additionally gdb is installed a coredump could be inspected
by 'coredumpctl gdb [PID]'.

Kind regards,
Bernhard

[1] https://wiki.debian.org/HowToGetABacktrace#Installing_the_debugging_symbols



Bug#935980: jackd2: Segfaults when qjackctl patchbay is activated

2019-08-30 Thread Christopher David Howie
On 8/28/2019 12:29 PM, Christopher David Howie wrote:
> jackd segfaults whenever the qjackctl patchbay is activated with a
> non-empty set of patches.  It's not clear to me exactly why this
> happens, but it happens every time.

I have done some additional testing on this and wanted to share the
results.  First, let me elaborate on my setup as some aspects may be
relevant to the problem.

* The network master is running jackd2 1.9.11 on Windows 10.

* The network slave is running jackd2 1.9.12 on Debian Buster (using the
provided Debian packages).

* There is a qjackctl patchbay on the network master that patches all
local output ports to the slave's network input ports, and the slave's
network output ports to the local input ports.

* There is a qjackctl patchbay on the network slave that patches various
ports between the slave's local ports and Ardour.

The bug is not 100% reproducible but it happens way more often than not
(probably in the 90%+ range) and appears to be triggered by both
patchbays being active (or, rather, all of the resulting port patches
being made).

If I restart everything and only active one of the patchbays (it does
not matter which one) then the the slave jackd does not segfault.
_Immediately_ upon activating the other patchbay, the slave jackd will
almost certainly segfault.

I have downgraded my jackd packages on the slave (jackd2,
libjack-jackd2-0, and libjack-jackd2-dev) to their respective latest
versions in stretch, which downgrades jackd from 1.9.12 (buster) to
1.9.10 (stretch).  This fully resolves the problem, hinting that this
segfault is a regression that was added after 1.9.10.

(Side note: Bernhard's issue looks unrelated and I'm not sure why it was
added as a reply to my report.)

-- 
Chris Howie
http://www.chrishowie.com
http://en.wikipedia.org/wiki/User:Crazycomputers

If you correspond with me on a regular basis, please read this document:
http://www.chrishowie.com/email-preferences/

PGP fingerprint: 2B7A B280 8B12 21CC 260A DF65 6FCE 505A CF83 38F5


IMPORTANT INFORMATION/DISCLAIMER

This document should be read only by those persons to whom it is
addressed.  If you have received this message it was obviously addressed
to you and therefore you can read it.

Additionally, by sending an email to ANY of my addresses or to ANY
mailing lists to which I am subscribed, whether intentionally or
accidentally, you are agreeing that I am "the intended recipient," and
that I may do whatever I wish with the contents of any message received
from you, unless a pre-existing agreement prohibits me from so doing.

This overrides any disclaimer or statement of confidentiality that may
be included on your message.



Bug#935980: jackd2: Segfaults when qjackctl patchbay is activated

2019-08-28 Thread Bernhard Übelacker
Dear Maintainer,
I tried to reproduce the issue, but unfortunately I
receive no segmentation fault, instead a floating point exception.
(By using the button with the play symbol at the middle bottom.)

This happens there because the divisor frame_rate is zero.
For this issue I could not find an upstream bugreport or even patch.

Kind regards,
Bernhard


(gdb) bt
#0  Jack::JackTransportEngine::SyncTimeout (this=this@entry=0x7f6fbf12b140, 
frame_rate=frame_rate@entry=0, buffer_size=buffer_size@entry=0) at 
../common/JackTransportEngine.cpp:54
#1  0x7f6fbeeca382 in Jack::JackTransportEngine::CycleEnd 
(this=0x7f6fbf12b140, table=table@entry=0x56138aad5708, frame_rate=0, 
buffer_size=0) at ../common/JackTransportEngine.cpp:221
#2  0x7f6fbeedacbd in Jack::JackEngineControl::CycleEnd 
(table=0x56138aad5708, this=) at 
../common/JackEngineControl.h:160
#3  Jack::JackEngine::Process (this=0x56138aad56c0, cur_cycle_begin=1105829020, 
prev_cycle_end=1104805827) at ../common/JackEngine.cpp:186
#4  0x7f6fbeed59de in Jack::JackLockedEngine::Process 
(prev_cycle_end=, cur_cycle_begin=, 
this=) at ../common/JackLockedEngine.h:261
#5  Jack::JackAudioDriver::ProcessGraphAsyncMaster (this=0x56138ab22820) at 
../common/JackAudioDriver.cpp:249
#6  0x7f6fbeed5ad5 in Jack::JackAudioDriver::ProcessGraphAsync 
(this=this@entry=0x56138ab22820) at ../common/JackAudioDriver.cpp:236
#7  0x7f6fbeed645e in Jack::JackWaiterDriver::ProcessNull 
(this=0x56138ab22820) at ../common/JackTimedDriver.cpp:79
#8  0x7f6fbeee445a in Jack::JackWaitThreadedDriver::Execute 
(this=0x56138ad16150) at ../common/JackWaitThreadedDriver.cpp:46
#9  0x7f6fbeed28d6 in Jack::JackPosixThread::ThreadHandler 
(arg=0x56138ad16168) at ../posix/JackPosixThread.cpp:59
#10 0x7f6fbee6efa3 in start_thread (arg=) at 
pthread_create.c:486
#11 0x7f6fbe9be4cf in clone () at 
../sysdeps/unix/sysv/linux/x86_64/clone.S:95

(gdb) list JackTransportEngine.cpp:54
50
51  // compute the number of cycle for timeout
52  void JackTransportEngine::SyncTimeout(jack_nframes_t frame_rate, 
jack_nframes_t buffer_size)
53  {
54  long buf_usecs = (long)((buffer_size * (jack_time_t)100) / 
frame_rate);
55  fSyncTimeLeft = fSyncTimeout / buf_usecs;
56  jack_log("SyncTimeout fSyncTimeout = %ld fSyncTimeLeft = %ld", 
(long)fSyncTimeout, (long)fSyncTimeLeft);
57  }
58

# Buster/stable amd64 qemu VM 2019-08-28

apt update
apt dist-upgrade

apt install systemd-coredump xserver-xorg lightdm openbox xterm fakeroot gdb 
jackd2 jackd2-dbgsym libjack-jackd2-0-dbgsym
apt build-dep jackd2


reboot


export DISPLAY=:0
jackd -R -d net -a 10.0.2.15


export DISPLAY=:0
LANG=C qjackctl


# press the play button in the middle
# jackd gets a floating point exception



mkdir /home/benutzer/source/jackd2/orig -p
cd/home/benutzer/source/jackd2/orig
apt source jackd2
cd



##



benutzer@debian:~$ LANG=C jackd -R -d net -a 10.0.2.15
jackdmp 1.9.12
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2017 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
no message buffer overruns
no message buffer overruns
no message buffer overruns
JACK server starting in realtime mode with priority 10
self-connect-mode is "Don't restrict self connect requests"
NetDriver started in async mode without Master's transport sync.
Waiting for a master...
Initializing connection with ...
 Network parameters 
Name : debian
Protocol revision : 8
MTU : 1500
Master name : 
Slave name : debian
ID : 0
Transport Sync : no
Send channels (audio - midi) : -1 - -1
Return channels (audio - midi) : -1 - -1
Sample rate : 0 frames per second
Period size : 0 frames per period
Network latency : 5 cycles
SampleEncoder : Float
Slave mode : async

Recv fd = 7 err = Resource temporarily unavailable
Recv connection lost error
Driver is restarted
JackTimedDriver::Process XRun = 12 usec
Restarting driver...
JackTimedDriver::Process XRun = 4 usec
NetDriver started in async mode without Master's transport sync.
JackTimedDriver::Process XRun = 3 usec
JackTimedDriver::Process XRun = 3 usec
JackTimedDriver::Process XRun = 3 usec
Waiting for a master...
JackTimedDriver::Process XRun = 4 usec
JackTimedDriver::Process XRun = 3 usec
Initializing connection with ...
 Network parameters 
Name : debian
JackTimedDriver::Process XRun = 4 usec
Protocol revision : 8
MTU : 1500
Master name : 
Slave name : debian
ID : 0
Transport Sync : no
Send channels (audio - midi) : -1 - -1
Return channels (audio - midi) : -1 - -1
Sample rate : 0 frames per second
Period size : 0 frames per period
Network latency : 5 cycles
SampleEncoder : Float
JackTimedDriver::Process XRun = 3 usec
Slave mode : async

Bug#935980: jackd2: Segfaults when qjackctl patchbay is activated

2019-08-28 Thread Christopher David Howie
Package: jackd2
Version: 1.9.12~dfsg-2

jackd segfaults whenever the qjackctl patchbay is activated with a
non-empty set of patches.  It's not clear to me exactly why this
happens, but it happens every time.

I run jackd like so:

$ jackd -R -d net -a 192.168.3.3

Here is jackd's output:

--8<--
jackdmp 1.9.12
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2017 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
JACK server starting in realtime mode with priority 10
self-connect-mode is "Don't restrict self connect requests"
NetDriver started in async mode without Master's transport sync.
Waiting for a master...
Initializing connection with burke...
 Network parameters 
Name : liz
Protocol revision : 8
MTU : 1500
Master name : burke
Slave name : liz
ID : 5
Transport Sync : no
Send channels (audio - midi) : 12 - 0
Return channels (audio - midi) : 14 - 0
Sample rate : 44100 frames per second
Period size : 256 frames per period
Network latency : 5 cycles
SampleEncoder : Float
Slave mode : async

JackGraphManager::Connect already connected port_src = 64 port_dst = 41
JackGraphManager::Connect already connected port_src = 65 port_dst = 42
JackGraphManager::Connect already connected port_src = 47 port_dst = 41
JackGraphManager::Connect already connected port_src = 48 port_dst = 42
JackGraphManager::Connect already connected port_src = 52 port_dst = 41
JackGraphManager::Connect already connected port_src = 53 port_dst = 42
JackGraphManager::Connect already connected port_src = 43 port_dst = 78
JackGraphManager::Connect already connected port_src = 90 port_dst = 78
JackGraphManager::Connect already connected port_src = 44 port_dst = 82
JackGraphManager::Connect already connected port_src = 91 port_dst = 82
JackGraphManager::Connect already connected port_src = 59 port_dst = 41
JackGraphManager::Connect already connected port_src = 60 port_dst = 42
JackGraphManager::Connect already connected port_src = 73 port_dst = 41
JackGraphManager::Connect already connected port_src = 74 port_dst = 42
JackGraphManager::Connect already connected port_src = 77 port_dst = 49
JackGraphManager::Connect already connected port_src = 77 port_dst = 70
JackGraphManager::Connect already connected port_src = 89 port_dst = 49
JackGraphManager::Connect already connected port_src = 89 port_dst = 70
JackGraphManager::Connect already connected port_src = 64 port_dst = 41
JackGraphManager::Connect already connected port_src = 65 port_dst = 42
JackGraphManager::Connect already connected port_src = 1 port_dst = 27
JackGraphManager::Connect already connected port_src = 59 port_dst = 41
JackGraphManager::Connect already connected port_src = 60 port_dst = 42
JackGraphManager::Connect already connected port_src = 43 port_dst = 78
JackGraphManager::Connect already connected port_src = 44 port_dst = 82
JackGraphManager::Connect already connected port_src = 77 port_dst = 49
JackGraphManager::Connect already connected port_src = 77 port_dst = 70
JackGraphManager::Connect already connected port_src = 90 port_dst = 78
JackGraphManager::Connect already connected port_src = 91 port_dst = 82
--8<--

At this point, I enable the patchbay in qjackctl.  jackd immediately
terminates with "Segmentation fault" and no further output.

-- 
Chris Howie
http://www.chrishowie.com
http://en.wikipedia.org/wiki/User:Crazycomputers

If you correspond with me on a regular basis, please read this document:
http://www.chrishowie.com/email-preferences/

PGP fingerprint: 2B7A B280 8B12 21CC 260A DF65 6FCE 505A CF83 38F5


IMPORTANT INFORMATION/DISCLAIMER

This document should be read only by those persons to whom it is
addressed.  If you have received this message it was obviously addressed
to you and therefore you can read it.

Additionally, by sending an email to ANY of my addresses or to ANY
mailing lists to which I am subscribed, whether intentionally or
accidentally, you are agreeing that I am "the intended recipient," and
that I may do whatever I wish with the contents of any message received
from you, unless a pre-existing agreement prohibits me from so doing.

This overrides any disclaimer or statement of confidentiality that may
be included on your message.