Looks like that was it! Thank you!
You've gotten me curious though: what other changes do you have locally?
------------------------------------------------------------------------
*From:* J. Liles
*Sent:* Saturday, January 02, 2021 3:48PM
*To:* Non
*Subject:* Re: [non] Segfault when deleting a control
Oh, and yes, the github issue tracker had to be shut down due to
continued harassment by Fillipe Coelho, Nils Hilbricht, and David
Runge. I simply don't have time to waste moderating for trolls. Please
direct any complaints to them. But anyway, the whole spirit of the
github thing never really worked out. I can count the number of PRs I
got on one finger. The rest was mostly reports of bugs that I either
can't reproduce or have already fixed and people demanding that I
implement things that would only be useful to them (and not to me or
other users) and other such nonsense. In fact I think writing a patch
should be easier than submitting a bug report and any effort spent
making submitting bug reports easier just reduces the number of
patches or at least well thought-out suggestions one receives. Time
will tell.
On Sat, Jan 2, 2021 at 1:34 PM J. Liles <[email protected]
<mailto:[email protected]>> wrote:
I've pushed what I believe to be the relevant fix to the tuxfamily
repo on the branch named "topic/fix-crash-on-module-removal".
If you can confirm that it fixes your issue, I'll push it to master.
I know for a fact that I don't experience this behavior, so I'm
confident it is already fixed, but if this wasn't the commit that
fixed it then it's probably not going to be easy for me to
separate out and you'll just have to wait until I push my private
development (if I ever find the motivation to do so).
Or someone could send me a patch, of course, which might restore
my faith in the free software "community".
On Sat, Jan 2, 2021 at 1:02 PM J. Liles <[email protected]
<mailto:[email protected]>> wrote:
It's a race condition where something in the process thread is
not recognizing the lock taken when removing the module.
I'm 99% this is already fixed in the version I run.
I've got a lot of changes and fixes piled up locally. I'll see
if I can dig this one out and push it since it seems to be
troubling you.
Been a bit discouraged with the Linux Audio/free software
scene as of late, what with the fact that people give me
demands rather than patches, and then proceed to rip off my
work and slander me in public. It's hard to be interested in
spending the time and effort it takes to publish changes (out
of the goodness of my heart) when I know full well that all
I'll receive in return is abuse.
On Sat, Jan 2, 2021 at 12:29 PM Aaron Duerksen
<[email protected] <mailto:[email protected]>>
wrote:
Well, I got *something* now, but I'm not entirely sure
where to go from here.
The core dump is here:
https://drive.google.com/file/d/1ywlMhK6GJRG5lRbGmg12-k04j9L4HJer/view?usp=sharing
And here's the terminal log from that session, after
recompiling with debugging enabled:
aaron@aaron-M6800:~$ non-mixer &
[2] 6332
aaron@aaron-M6800:~$ The Non-Mixer 1.2.0 -- Copyright (c)
2008-2013 Jonathan Moore Liles
[non-mixer] ../nonlib/OSC/Endpoint.C:202 init(): Creating
OSC server
[non-mixer] ../mixer/src/Plugin_Module.C:257
discover_thread(): Discovering plugins in the background
WARNING: LADSPA_PATH environment variable not set
Assuming /usr/lib/ladspa:/usr/local/lib/ladspa
OSC=osc.udp://aaron-M6800:16412/
[non-mixer] ../mixer/src/main.C:310 main(): Running UI...
[non-mixer] ../nonlib/OSC/Endpoint.C:1156 osc_thread():
OSC Thread running
X_ChangeProperty: BadValue (integer parameter out of range
for operation) 0x0
WARNING: Could not open path /usr/local/lib/ladspa/
10 plugins found in 5 libraries
WARNING: LADSPA_RDF_PATH environment variable not set
Assuming
/usr/share/ladspa/rdf:/usr/local/share/ladspa/rdf
WARNING: Could not open path /usr/local/share/ladspa/rdf/
gdb `which non-mixer` `pidof non-mixer`
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and
redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources
online at:
<http://www.gnu.org/software/gdb/documentation/>
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to
"word"...
Reading symbols from /usr/local/bin/non-mixer...
Attaching to program: /usr/local/bin/non-mixer, process 6332
Could not attach to process. If your uid matches the uid
of the target
process, check the setting of
/proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see
/etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
/home/aaron/6332: No such file or directory.
(gdb) set logging on
Copying output to gdb.txt.
Copying debug output to gdb.txt.
(gdb) thread apply all bt full
(gdb) [non-mixer] ../mixer/src/Mixer.C:230 cb_menu():
Picked &Mixer/&Add Strip
[non-mixer] ../mixer/src/Module.C:606 chain(): Module
Controller already belongs to chain NULL
Cannot lock down 82280346 byte memory area (Cannot
allocate memory)
Cannot use real-time scheduling (RR/5)(1: Operation not
permitted)
JackClient::AcquireSelfRealTime error
Cannot lock down 82280346 byte memory area (Cannot
allocate memory)
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 0
Cannot use real-time scheduling (RR/5)(1: Operation not
permitted)
JackClient::AcquireSelfRealTime error
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module (null) in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Controller in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Controller in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Controller in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Meter Indicator in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module JACK in to chain Unnamed
[non-mixer] ../nonlib/JACK/Port.C:193 activate():
Activating port name in-1
[non-mixer] ../nonlib/JACK/Port.C:207 activate(): Port = 0x5
[non-mixer] ../mixer/src/Mixer.C:1155 auto_connect(): Full
auto-connect cycle
[non-mixer] ../mixer/src/Module.C:606 chain(): Module JACK
already belongs to chain Unnamed
[non-mixer] ../mixer/src/Mixer_Strip.C:440
handle_module_added(): Connecting controls to default
module "JACK"
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 1
[non-mixer] ../mixer/src/Chain.C:629 insert(): Module
"JACK" has 0:1 audio and 2:0 control ports
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Gain in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:606 chain(): Module Gain
already belongs to chain Unnamed
[non-mixer] ../mixer/src/Mixer_Strip.C:440
handle_module_added(): Connecting controls to default
module "Gain"
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 1
[non-mixer] ../mixer/src/Chain.C:629 insert(): Module
"Gain" has 1:1 audio and 2:0 control ports
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Meter in to chain Unnamed
[non-mixer] ../mixer/src/Mixer_Strip.C:440
handle_module_added(): Connecting controls to default
module "Meter"
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 1
[non-mixer] ../mixer/src/Chain.C:629 insert(): Module
"Meter" has 1:1 audio and 0:1 control ports
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module JACK in to chain Unnamed
[non-mixer] ../mixer/src/Module.C:606 chain(): Module JACK
already belongs to chain Unnamed
[non-mixer] ../nonlib/JACK/Port.C:193 activate():
Activating port name out-1
[non-mixer] ../nonlib/JACK/Port.C:207 activate(): Port = 0x6
[non-mixer] ../mixer/src/Mixer_Strip.C:440
handle_module_added(): Connecting controls to default
module "JACK"
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 1
[non-mixer] ../mixer/src/Chain.C:629 insert(): Module
"JACK" has 1:0 audio and 2:0 control ports
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 1
[non-mixer] ../mixer/src/Mixer.C:755 add(): Add mixer
strip "Unnamed"
[non-mixer] ../mixer/src/Module.C:843 insert_menu_cb():
picked = Mono Pan
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Mono Pan in to chain Unnamed
[non-mixer] ../nonlib/JACK/Port.C:193 activate():
Activating port name out-2
[non-mixer] ../nonlib/JACK/Port.C:207 activate(): Port = 0x7
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 2
[non-mixer] ../mixer/src/Chain.C:629 insert(): Module
"Mono Pan" has 1:2 audio and 1:0 control ports
[non-mixer] ../mixer/src/Module.C:1397
command_open_parameter_editor(): Opening module parameters
for "Mono Pan"
[non-mixer] ../mixer/src/Module_Parameter_Editor.C:621
menu_cb(): Bind
[non-mixer] ../mixer/src/Module.C:595 chain(): Adding
module Pan in to chain Unnamed
[non-mixer] ../mixer/src/Chain.C:375 configure_ports():
required_buffers = 2
[non-mixer] ../mixer/src/Chain.C:308 remove(): Removing
controller module from chain
thread apply all bt full
(gdb) quit
[2]+ Segmentation fault (core dumped) non-mixer
aaron@aaron-M6800:~$ gdb `which non-mixer` core
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and
redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources
online at:
<http://www.gnu.org/software/gdb/documentation/>
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to
"word"...
Reading symbols from /usr/local/bin/non-mixer...
[New LWP 6362]
[New LWP 6332]
[New LWP 6334]
[New LWP 6361]
[New LWP 6360]
[Thread debugging using libthread_db enabled]
Using host libthread_db library
"/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `non-mixer'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00005562fe5421ff in Chain::process
(this=0x5562ff9c0660, nframes=1024) at
../mixer/src/Chain.C:906
906 m->process( nframes );
[Current thread is 1 (Thread 0x7f1c023f4700 (LWP 6362))]
(gdb) quit
aaron@aaron-M6800:~$
gdb.txt is present but still empty after all that.
The seemingly relevant sections of code are Chain.C:308,
which includes the last debug message as I removed the
control:
void
Chain::remove ( Controller_Module *m )
{
DMESSAGE( "Removing controller module from chain" );
client()->lock();
m->disconnect();
controls_pack->remove( m );
modules_pack->remove( m );
build_process_queue();
client()->unlock();
redraw();
}
and Chain.C:906, which has the segfault itself:
/**********/
/* Client */
/**********/
void
Chain::process ( nframes_t nframes )
{
for ( std::list<Module*>::const_iterator i =
process_queue.begin(); i != process_queue.end(); ++i )
{
Module *m = *i;
m->process( nframes ); // <-- segfault here
}
}
Looks to me like something's not getting removed
completely. Maybe a multithreaded race condition that
always loses on my machine? (yes, I know the removal is
inside a lock, but anything can have bugs in it, including
the lock structure or perhaps more likely its use)
------------------------------------------------------------------------
*From:* John Rigg
*Sent:* Saturday, January 02, 2021 3:16AM
*To:* Non
*Subject:* Re: [non] Segfault when deleting a control
On Fri, Jan 01, 2021 at 09:51:35AM -0600, Aaron Duerksen wrote:
1. Start non-mixer
2. Add a strip
3. Add a Mono Pan, or anything else, really
4. Bind a control from it
5. Remove that control
6. Segfault
This happens every time, as demonstrated in this 45-second video
screenshot:
https://www.youtube.com/watch?v=9mmC_ODMmfo
I would review the core dump and include at least parts of it here,
if I
knew where it was.?? Lubuntu 20.04
I would also create a ticket on GitHub, if I could figure out how.
I can see
the existing issues and read them, but I can't figure out how to
add one,
even after creating an account.?? The obvious eye-catching way
seems to
dead-end.
The 'issues' link on the GitHub page was recently removed, so I
guess
this list is the official way to report bugs.
If you haven't already read it, see the bug reporting page at
https://non.tuxfamily.org/wiki/BugReports (ignoring references
to GitHub).
A gdb backtrace will be helpful. You'll need to compile non with
debugging enabled, ie.:
./waf configure --enable-debug
John