Hi Bryan, Thomas,
I think I have the same problem as you. My external crashes when I try to delete the object from the canvas i.e when the destructor of my external is called. The BT is
#0 0xb7db0334 in free () from /lib/tls/i686/cmov/libc.so.6 #1 0xb72858b1 in operator delete (ptr=0x0) at ../../../../src/libstdc++-v3/libsupc++/del_op.cc:49 #2 0xb72da0d1 in Mixer::~Mixer () from /usr/lib/libsndobj.so.2 #3 0xb733383b in resoncomb::FreeObjs () from /usr/lib/pd/extra/resoncomb~.pd_linux #4 0xb733f4af in flext_sndobj::ClearObjs () from /usr/lib/pd/extra/resoncomb~.pd_linux #5 0xb733f5e8 in flext_sndobj::Exit () from /usr/lib/pd/extra/resoncomb~.pd_linux #6 0xb733549f in flext_obj_single::obj_free () from /usr/lib/pd/extra/resoncomb~.pd_linux
I tried adding '#define FLEXT_USE_CMEM' to the top of flext.h. I rebuilt flext and installed it. I also added the define to the top of my own external and rebuilt it. No joy ;( Firstly is this/are these the correct place(s) to define FLEXT_USE_CMEM ?
Thomas while looking over the Flext docs I came across this :
"Some few external libraries have troubles with flext's global new and delete overloadings. In these cases one can switch back to the C library memory operators by defining the FLEXT_NOGLOBALNEW macro before inclusion of the flext.h header file (e.g. as a -D compiler option)"
Again where should this FLEXT_NOGLOBALNEW be defined? in the package.txt ? (Sorry I am by no means experienced with this native stuff).
Would this bug be related to the problem I am experiencing. The exception is thrown on a delete of SndObj pointer. I have already talked to Victor and he has never seen anything like this before.
So frustrating, I have finished my first PD external (Multi stereo comb filter) and I want to release it properly but I can't with this bug in it !!!
Conor
Thomas Grill wrote:
Hi Bryan, i think it would be a good idea to define FLEXT_USE_CMEM in the flext
build system by default. Currently pd doesn't use anything different than C memory allocation
(in getbytes, freebytes) so there's no real reason to not to. Concerning your fluid problems i can't really help, since i don't use
it, but i'm sure there are some experts who can.
all the best, Thomas
Am 28.01.2007 um 17:17 schrieb Bryan Jurish:
morning all,
I've been chasing a bug for several weeks now that I just can't
seem to get my head around: symptoms are segfaults and complete crashes in pd (v0.40-2 vanilla) on linux/x86 [debian unstable, gcc 4.1.2]. gdb backtraces are available, and I've just recompiled using identical CFLAGS everywhere (-O3 -march=pentium-m -msse -msse2 -mfpmath=sse -ffast-math -funroll-loops), since I had feared that -malign-double might have been biting me, but this doesn't appear to have been the
case...Buglet the First (solved, kinda)
- description: [pool] and [readanysf~] don't play nicely together
- symptom: the (infamous) libc message on stderr when closing a patch: *** glibc detected *** free(): invalid pointer: 0x0823e46c ***
- apparently caused by some goofiness with the flext delete()
operator (backtraces etc. available)
- solution (I think, thanks to the list archives):
- compile both flext and readanysf~ with -DFLEXT_USE_CMEM
- readanysf~ really seems to need FLEXT_USE_CMEM flext-globally
(I can provide a pretty complete and systematic list of the configurations
I've tried: it's possible to compile and run successfully without FLEXT_USE_CMEM, but things break more or less randomly at runtime
then: particularly, the "stop" message to readanysf~ segfaults pd)
- solution (I think, thanks to the list archives):
- this seems to work for [pool] and [readanysf~], but...
Buglet the Second (please assist!)
- description: [fluid~] in abstractions crashes pd
- having compiled flext with -DFLEXT_USE_CMEM, loading any
abstraction containing a [fluid~] object causes pd to segfault (see below)
bug occurs even without any other externals loaded
oddly, I *can* create [fluid~]s by hand, (but not load them in an abstraction, which makes the object pretty useless, im(ns)ho)
any ideas why fluid_init() is trying to initialize this==NULL ?
- this appears to be FLEXT_USE_CMEM related, since I didn't get these symptoms without FLEXT_USE_CMEM in flext itself
I can't just -UFLEXT_USE_CMEM for fluid~, because: (a) that would break readanysf~ if I did it flext-globally, and (b) if I undefine FLEXT_USE_CMEM only for fluid~, I get undefined linker symbols at runtime:
/usr/local/lib/pd/extra/fluid~.pd_linux: \ /usr/local/lib/pd/extra/fluid~.pd_linux: undefined symbol: \ _ZN19flext_root_single_ddlEPv \
fluid~: can't load library
would it help to fork the flext build procedure (again!), basically adding another library suffix for FLEXT_USE_CMEM, since its effects appear not to be restricted to the headers?
- if the suffix were, say, 'c', where we now have: libflext-pd((_d)?.so|_[st]d?.a) we would get: libflext-pd((_c?d?).so|_[st]c?d?.a)
- i know this is ugly, and I'm not even sure it would work, but I'm at my wits' end here... I hope somebody can shed some light on this for me...
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1210693952 (LWP 24068)] 0xb7dcb589 in free () from /lib/tls/i686/cmov/libc.so.6 (gdb) backtrace #0 0xb7dcb589 in free () from /lib/tls/i686/cmov/libc.so.6 #1 0xb7d1e639 in delete_fluid_synth () from /usr/lib/ libfluidsynth.so.1 #2 0x08237bd0 in ?? () #3 0x0811ace0 in mstack.5434 () #4 0xbfd76828 in ?? () #5 0xb7d47366 in fluid::fluid_init (this=0x0, argc=-1210746848, argv=0xb7caf730) at fluid/main.cpp:251 Previous frame inner to this frame (corrupt stack?)
marmosets, Bryan