[PD-dev] ugly segfaults with external...

=?X-UNKNOWN?Q?g=FCnter_geiger?= geiger at xdv.org
Thu Jul 25 09:29:26 CEST 2002


Dear Ben,

scanning trought the code I couldn't find any strange things. Instead of
being useful on this side, I have a suggestion that would make tracking
down these things easier. That is ... :)

Is it possible to put this in the pure-date CVS ?

The advantage in this case would be that
1) you just tell your problem on the list, no need of gdb dumps, cleaned
up code examples, etc ...
2) everyone working with the CVS will have your code automatically through
the cvs upgrade command and can test it immediately, and if there is a bug
it can be fixed directly.
3) We dont have to copy/paste the code and write a makefile to compile and
look what it does

Well, thats all of the propaganda, if  there are things that speak against
it, please let me know.

Greetings,

Guenter


On Wed, 24 Jul 2002, Ben Bogart - FMPM/F1999 wrote:

> Hi all,
>
> I seem to be getting some very ugly segfaults from strange interactions
> between my chaos math externals (lorenz, henon, rossler).
>
> Each external works perfectly on thier own, but if I put more than one in
> a patch, or changle the name of one to another in an object box I get
> strange values output (like + or nan) , or segfaults.
>
> I'm just sending the henon external, the other two work just the same but
> with different equations.
>
> Here is my Source:
> ------------------
>
> #include "m_pd.h"
> #include <math.h>
> #include <stdlib.h>
>
> t_class *myclass;
>
> typedef struct thisismystruct
> {
>         t_object myobj;
>         double a,b,lx0,ly0;
>         t_outlet *y_outlet;
> }       mystruct;
>
> void calculate(mystruct *x)
> {
>         double lx0,ly0,lx1,ly1;
>         double a,b;
>
>         a = x->a;
>         b = x->b;
>         lx0 = x->lx0;
>         ly0 = x->ly0;
>
>         lx1 = (ly0 + 1) - (a * pow(lx0,2));
>         ly1 = b * lx0;
>         x->lx0 = lx1;
>         x->ly0 = ly1;
>
>         outlet_float(x->myobj.ob_outlet, (t_float)lx1);
>         outlet_float(x->y_outlet, (t_float)ly1);
> }
>
> void reset(mystruct *x, t_floatarg a, t_floatarg b)
> {
>         x->a = (double)a;
>         x->b = (double)b;
>         x->lx0 = 1;
>         x->ly0 = 1;
> }
>
> void *henon_new(void)
> {
>         mystruct *x = (mystruct *)pd_new(myclass);
>         x->a = 1.4;
>         x->b = 0.3;
>         x->lx0 = 1;
>         x->ly0 = 1;
>
>         outlet_new(&x->myobj, &s_float);                /* Default float
> outlet */
>         x->y_outlet = outlet_new(&x->myobj, &s_float);
>         return (void *)x;
> }
>
>
> void henon_setup(void)
> {
>         myclass = class_new(gensym("henon"),    /* symname is the
> symbolic name */
>         (t_newmethod)henon_new,                 /* Constructor Function */
>         0,                                              /* Destructor
> Function */
>         sizeof(mystruct),                               /* Size of the
> structure */
>         CLASS_DEFAULT,                                  /* Graphical
> Representation */
>         0);                                             /* 0 Terminates
> Argument List */
>
>         class_addbang(myclass, (t_method)calculate);
>         class_addmethod(myclass,B
>                         (t_method)reset,
>                         gensym("reset"),
>                         A_DEFFLOAT,
>                         A_DEFFLOAT,
>                         0);
> }
>
> Here is my GDB Output:
> ----------------------
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 1024 (LWP 5262)]
> 0x0808a0d7 in outlet_float (x=0x80e04e0, f=-0) at m_obj.c:343
> 343             pd_float(oc->oc_to, f);
> (gdb) where
> #0  0x0808a0d7 in outlet_float (x=0x80e04e0, f=-0) at m_obj.c:343
> #1  0x400175a0 in calculate () from
> /usr/local/lib/pd/extra/rossler.pd_linux
> #2  0x0808a007 in outlet_bang (x=0x80e0288) at m_obj.c:311
> #3  0x08072473 in bng_bout2 (x=0x80e01b8) at g_7_guis.c:1211
> #4  0x08072681 in bng_click (x=0x80e01b8, xpos=184, ypos=115, shift=0,
> ctrl=0,
>     alt=0) at g_7_guis.c:1254
> #5  0x080726ce in bng_newclick (z=0x80e01b8, glist=0x80dfc00, xpix=184,
> ypix=115,
>     shift=0, alt=0, dbl=0, doit=1) at g_7_guis.c:1260
> #6  0x0806a54d in gobj_click (x=0x80e01b8, glist=0x80dfc00, xpix=184,
> ypix=115,
>     shift=0, alt=0, dbl=0, doit=1) at g_editor.c:62
> #7  0x0806b5e9 in canvas_doclick (x=0x80dfc00, xpos=184, ypos=115,
> which=1, mod=0,
>     doit=1) at g_editor.c:455
> #8  0x0806bd84 in canvas_mousedown (x=0x80dfc00, xpos=184, ypos=115,
> which=1, mod=0)
>     at g_editor.c:606
> #9  0x08089012 in pd_typedmess (x=0x80dfc00, s=0x80d41d0, argc=0,
> argv=0x80cb308)
>     at m_class.c:669
> #10 0x080681c7 in guiconnect_anything (x=0x80dfad8, s=0x80d41d0, ac=4,
> av=0x80cb2e8)
>     at g_guiconnect.c:70
> #11 0x08089218 in pd_typedmess (x=0x80dfad8, s=0x80d41d0, argc=4,
> argv=0x80cb2e8)
>     at m_class.c:690
> #12 0x0808c984 in binbuf_eval (x=0x80de808, target=0x80dfad8, argc=0,
> argv=0x0)
>     at m_binbuf.c:570
> #13 0x08091ca4 in socketreceiver_read (x=0x80de828, fd=8) at s_inter.c:307
> #14 0x0809164a in sys_domicrosleep (microsec=0, pollem=1) at s_inter.c:144
> #15 0x08092815 in sys_pollgui () at s_inter.c:732
> #16 0x0808fee6 in m_scheduler (nodacs=0) at m_sched.c:441
> #17 0x080904f9 in sys_main (argc=1, argv=0xbffff7e4) at s_main.c:258
> #18 0x08094356 in main (argc=1, argv=0xbffff7e4) at s_entry.c:9
> #19 0x4007a9ed in __libc_start_main () from /lib/libc.so.6
>
>
> Thanks for your help, I would appriciate any help/pointers anyone would
> provide.
>
> Thanks
> Ben
>
>
>
> B. Bogart
> ---------
>
>
>
> _______________________________________________
> PD-dev mailing list
> PD-dev at iem.kug.ac.at
> http://iem.kug.ac.at/cgi-bin/mailman/listinfo/pd-dev
>





More information about the Pd-dev mailing list