porres / pd-cyclone

A set of Pure Data objects cloned from Max/MSP
BSD 3-Clause "New" or "Revised" License
198 stars 25 forks source link

[zl scramble] and [zl swap] (sometimes) freeze Pd #636

Closed umlaeute closed 7 months ago

umlaeute commented 7 months ago

opening the help-patch for [zl] freezes Pd.

  1. if i replace the two invocations of [cyclone/zl scramble] and [cyclone/zl swap] with stubs (in my favourite text editor), the help patch works OK.
  2. in a new patch: creating a [cyclone/zl scramble 1 2 3 4 5] resp. [cyclone/zl swap 3 2 1 0] works
    • saving that patch and opening it again, works
  3. creating a non-patch object (e.g. [float]) and then replacing it's text with e.g. cyclone/zl swap 3 2 1 0 works
  4. creating an abstraction/subpatch (e.g. [pd bla] or [outlet~]) and then replacing it's text with e.g. cyclone/zl swap 3 2 1 0 freezes Pd

this is on Debian/GNU linux with Cyclone 0.8-0 obtained via deken and with the Debian pd-cyclone package (which is the same version)

porres commented 7 months ago

can't reproduce it on mac :/

umlaeute commented 7 months ago

well, i can reproduce it on two different systems.

you might want to get a VM fo rlinux, if you cannot reproduce in to macOS...

umlaeute commented 7 months ago

also note that a typically cause for things happening on one OS but not on another is that memory is allocated differently. e.g. a pointer that is not properly initialized, might happen to be NULL on your system and non-NULL on my system, creating an endless loop. or one system might allocate to different base-sizes (effectively over-allocating memory), so that an out-of-bound read/write might be less desastrous than on other systems.

in any case, here's an excerpt of what valgrind thinks:

==95709== Invalid read of size 8
==95709==    at 0x484ADFF: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x51D7D49: zldata_realloc (zl.c:105)
==95709==    by 0x51D8436: zldata_init (zl.c:122)
==95709==    by 0x51D8436: zl_new (zl.c:1629)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==  Address 0x5134988 is 0 bytes after a block of size 16,568 alloc'd
==95709==    at 0x48459F3: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x1AE91A: getbytes (in /usr/bin/puredata)
==95709==    by 0x1B1915: pd_new (in /usr/bin/puredata)
==95709==    by 0x51D7F94: zl_new (zl.c:1574)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709== 
==95709== Invalid read of size 8
==95709==    at 0x484ADE4: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x51D7D49: zldata_realloc (zl.c:105)
==95709==    by 0x51D8436: zldata_init (zl.c:122)
==95709==    by 0x51D8436: zl_new (zl.c:1629)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==  Address 0x5134990 is 8 bytes after a block of size 16,568 alloc'd
==95709==    at 0x48459F3: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x1AE91A: getbytes (in /usr/bin/puredata)
==95709==    by 0x1B1915: pd_new (in /usr/bin/puredata)
==95709==    by 0x51D7F94: zl_new (zl.c:1574)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709== 
==95709== Invalid read of size 8
==95709==    at 0x484ADEF: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x51D7D49: zldata_realloc (zl.c:105)
==95709==    by 0x51D8436: zldata_init (zl.c:122)
==95709==    by 0x51D8436: zl_new (zl.c:1629)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==  Address 0x5134998 is 16 bytes after a block of size 16,568 alloc'd
==95709==    at 0x48459F3: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x1AE91A: getbytes (in /usr/bin/puredata)
==95709==    by 0x1B1915: pd_new (in /usr/bin/puredata)
==95709==    by 0x51D7F94: zl_new (zl.c:1574)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709== 
==95709== Invalid read of size 8
==95709==    at 0x484ADF7: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==95709==    by 0x51D7D49: zldata_realloc (zl.c:105)
==95709==    by 0x51D8436: zldata_init (zl.c:122)
==95709==    by 0x51D8436: zl_new (zl.c:1629)
==95709==    by 0x1AD454: pd_typedmess (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x196278: ??? (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==    by 0x1AB01A: binbuf_evalfile (in /usr/bin/puredata)
==95709==    by 0x159F48: glob_evalfile (in /usr/bin/puredata)
==95709==    by 0x1B9E64: ??? (in /usr/bin/puredata)
==95709==    by 0x1BB091: glob_initfromgui (in /usr/bin/puredata)
==95709==    by 0x1AA5BF: binbuf_eval (in /usr/bin/puredata)
==95709==  Address 0x51349a0 is 16 bytes after a block of size 16,576 in arena "client"
==95709== 
porres commented 7 months ago

@umlaeute test now please the fix frmo https://github.com/porres/pd-cyclone/pull/637

umlaeute commented 7 months ago

it seems that crash has been fixed