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 ---------
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@iem.kug.ac.at http://iem.kug.ac.at/cgi-bin/mailman/listinfo/pd-dev
Hi Guenter,
Frankly I never thought of releasing these externals, partially because I'm not sure if anyone would be interested, partially because I have no self-confidence with C, and have the feeling that a lot of the code I write is not stable. (just because it bahaves with me, does not mean it would be for everyone!)
Also I've never used CVS, but I'm sure its worth figuring out.
So I guess for the good of the community I should just jump in eh?
sooo where do I start? ( I just searched for "CVS" on the mailinglist archive and it returned no matches for the past 4 months??)
Thanks for the push Guenter. ;)
Ben
On Thu, 25 Jul 2002, =?X-UNKNOWN?Q?g=FCnter_geiger?= wrote:
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
- 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@iem.kug.ac.at http://iem.kug.ac.at/cgi-bin/mailman/listinfo/pd-dev
B. Bogart ---------
On Thu, 25 Jul 2002, Ben Bogart - FMPM/F1999 wrote:
Frankly I never thought of releasing these externals, partially because I'm not sure if anyone would be interested, partially because I have no self-confidence with C, and have the feeling that a lot of the code I write is not stable. (just because it bahaves with me, does not mean it would be for everyone!)
I for one would like to express definitive interest in both your chaos-math externals and their inclusion in CVS. Guenter isn't just right (IMO) about the ease of debugging code from it, but there is people like me around willing to test for you/with you...
Also I've never used CVS, but I'm sure its worth figuring out.
not as hard as it seems
So I guess for the good of the community I should just jump in eh?
Yes please!
dc
On Thu, 25 Jul 2002, =?X-UNKNOWN?Q?g=FCnter_geiger?= wrote:
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
- 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@iem.kug.ac.at http://iem.kug.ac.at/cgi-bin/mailman/listinfo/pd-dev
B. Bogart
PD-dev mailing list PD-dev@iem.kug.ac.at http://iem.kug.ac.at/cgi-bin/mailman/listinfo/pd-dev
david casal --0+ --- d.casal@uea.ac.uk --9+ --- www.ariada.uea.ac.uk/~dcasal --)+
There are instructions at pure-data.sf.net, once you have your external cvs'd it is pretty easy to use cvs, waiting to hear from you, we have enough space there :)
And if you have problems with the procedure, tell me ...
Guenter
On Thu, 25 Jul 2002, Ben Bogart - FMPM/F1999 wrote:
Hi Guenter,
Frankly I never thought of releasing these externals, partially because I'm not sure if anyone would be interested, partially because I have no self-confidence with C, and have the feeling that a lot of the code I write is not stable. (just because it bahaves with me, does not mean it would be for everyone!)
Also I've never used CVS, but I'm sure its worth figuring out.
So I guess for the good of the community I should just jump in eh?
sooo where do I start? ( I just searched for "CVS" on the mailinglist archive and it returned no matches for the past 4 months??)
Thanks for the push Guenter. ;)
Ben
On Thu, 25 Jul 2002, =?X-UNKNOWN?Q?g=FCnter_geiger?= wrote:
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
- 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@iem.kug.ac.at http://iem.kug.ac.at/cgi-bin/mailman/listinfo/pd-dev
B. Bogart
hi Ben,
just a wild guess -- wonder if declaring all your functions static helps -- except [lorenz|henon|rossler]_setup(), of course?
Krzysztof
Ben Bogart - FMPM/F1999 wrote: ..
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.