zynaddsubfx / zyn-fusion-issues

Issue Only Repo
31 stars 0 forks source link

Plugin crashes when UI is closed in Zrythm #270

Open alex-tee opened 3 years ago

alex-tee commented 3 years ago

the UI looks like this in Zrythm: Screenshot from 2021-01-20 19-54-01

I'm on GuixSD but users report the same issue on various distros.

below is the backtrace when the plugin crashes when the window is closed

(zrythm:31056): zrythm-DEBUG: 19:52:08.655: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.673: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.692: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.710: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.728: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.746: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.765: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.783: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.801: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.819: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.838: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.856: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.874: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.892: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.910: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.928: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.947: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.965: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:08.983: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.001: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.019: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.038: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.056: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.074: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.092: (lv2_ui_send_control_val_event_from_plugin_to_ui:215): lv2_ui_send_control_val_event_from_plugin_to_ui: ZynAddSubFX: osc_port (20)
(zrythm:31056): zrythm-DEBUG: 19:52:09.098: (on_delete_event:546): pushing UI event ET_PLUGIN_VISIBILITY_CHANGED (on_delete_event:546)
[INFO:Zyn] zest_close()
[INFO] Closing MRuby Application...
--Type <RET> for more, q to quit, c to continue without paging--

Thread 1 "zrythm" received signal SIGSEGV, Segmentation fault.
0x00007fffd99aece7 in br_destroy_schema () from /gnu/store/dnm1j3rni3bs6fmvjjl9mq1i9ff15f8l-mruby-zest-3.0.5-ba39aabd/lib/zynfusion/libzest.so
(gdb) bt
#0  0x00007fffd99aece7 in br_destroy_schema () from /gnu/store/dnm1j3rni3bs6fmvjjl9mq1i9ff15f8l-mruby-zest-3.0.5-ba39aabd/lib/zynfusion/libzest.so
#1  0x00007fffd9932f1f in mrb_remote_free () from /gnu/store/dnm1j3rni3bs6fmvjjl9mq1i9ff15f8l-mruby-zest-3.0.5-ba39aabd/lib/zynfusion/libzest.so
#2  0x00007fffd9903d63 in mrb_gc_destroy () from /gnu/store/dnm1j3rni3bs6fmvjjl9mq1i9ff15f8l-mruby-zest-3.0.5-ba39aabd/lib/zynfusion/libzest.so
#3  0x00007fffd98ebd0a in mrb_close () from /gnu/store/dnm1j3rni3bs6fmvjjl9mq1i9ff15f8l-mruby-zest-3.0.5-ba39aabd/lib/zynfusion/libzest.so
#4  0x00007fffd9934238 in zest_close () from /gnu/store/dnm1j3rni3bs6fmvjjl9mq1i9ff15f8l-mruby-zest-3.0.5-ba39aabd/lib/zynfusion/libzest.so
#5  0x00007fffd9e300aa in ZynAddSubFXUI::~ZynAddSubFXUI() () from /home/alex/.guix-profile/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so
#6  0x00007fffd9e2e7d0 in DISTRHO::lv2ui_cleanup(void*) () from /home/alex/.guix-profile/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so
#7  0x000000000051587e in on_plug_removed (sock=0x5f119500, data=0x0) at ../src/plugins/lv2/suil/x11_in_gtk3.c:108
#8  0x00007ffff7c05386 in _gtk_marshal_BOOLEAN__VOID () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#9  0x00007ffff7383b4d in g_closure_invoke () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#10 0x00007ffff7396cde in signal_emit_unlocked_R () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#11 0x00007ffff739ef5c in g_signal_emit_valist () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#12 0x00007ffff73a0412 in g_signal_emit_by_name () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#13 0x00007ffff7bf63ff in _gtk_plug_remove_from_socket () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#14 0x00007ffff7bf7460 in gtk_socket_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#15 0x00007ffff7383c90 in _g_closure_invoke_va () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#16 0x00007ffff739f886 in g_signal_emit_valist () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#17 0x00007ffff739ff62 in g_signal_emit () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#18 0x00007ffff7bb7aee in gtk_widget_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#19 0x00007ffff7bbbda5 in gtk_widget_real_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#20 0x00007ffff7383c90 in _g_closure_invoke_va () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#21 0x00007ffff739f886 in g_signal_emit_valist () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#22 0x00007ffff739ff62 in g_signal_emit () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#23 0x00007ffff7bb7aee in gtk_widget_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#24 0x00007ffff796c37c in gtk_box_forall () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#25 0x00007ffff7bbbda5 in gtk_widget_real_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#26 0x00007ffff7383c90 in _g_closure_invoke_va () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#27 0x00007ffff739f886 in g_signal_emit_valist () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#28 0x00007ffff739ff62 in g_signal_emit () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#29 0x00007ffff7bb7aee in gtk_widget_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#30 0x00007ffff7bc6069 in gtk_window_forall () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#31 0x00007ffff7bbbda5 in gtk_widget_real_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#32 0x00007ffff7bc997e in gtk_window_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#33 0x00007ffff7383b4d in g_closure_invoke () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#34 0x00007ffff7396738 in signal_emit_unlocked_R () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#35 0x00007ffff739f5a5 in g_signal_emit_valist () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#36 0x00007ffff739ff62 in g_signal_emit () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#37 0x00007ffff7bb7aee in gtk_widget_unrealize () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#38 0x00007ffff7bba208 in gtk_widget_dispose () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#39 0x00007ffff7bcceb8 in gtk_window_dispose () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#40 0x00007ffff738a0a8 in g_object_run_dispose () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgobject-2.0.so.0
#41 0x00007ffff7a7d2bc in gtk_main_do_event () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgtk-3.so.0
#42 0x00007ffff777d185 in _gdk_event_emit () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgdk-3.so.0
#43 0x00007ffff77adb12 in gdk_event_source_dispatch () from /gnu/store/1biqkwwsx20rbg8xm1y66qdj41h2jp4h-gtk+-3.24.23/lib/libgdk-3.so.0
#44 0x00007ffff729beda in g_main_context_dispatch () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libglib-2.0.so.0
#45 0x00007ffff729c0d8 in g_main_context_iterate.isra () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libglib-2.0.so.0
#46 0x00007ffff729c15c in g_main_context_iteration () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libglib-2.0.so.0
#47 0x00007ffff74a598d in g_application_run () from /gnu/store/zlcfdzl4f3rb3cnf05jb6r6fyl2ahv5v-glib-2.62.6/lib/libgio-2.0.so.0
#48 0x000000000045645e in main (argc=2, argv=0x7fffffffcdb8) at ../src/main.c:615
(gdb) 

version: 3.0.5

alex-tee commented 3 years ago

note that it works with jalv.gtk3

Screenshot from 2021-01-20 19-59-01

fundamental commented 3 years ago

Given that a number of things have changed in the UI side, is different behavior observed with the 3.0.6-rc1 version?

alex-tee commented 3 years ago

I have no idea sorry, it's way too complex to build on Guix

fundamental commented 3 years ago

On 01-22, alex-tee wrote:

I have no idea sorry, it's way too complex to build on Guix

100% fair. If I'm able to provide an updated libzest.so would you be good with testing it out? It should hopefully be sufficient to swap out the existing one.

Zyn is using a very old version of DPF which is in the main plugin library, but all of the drawing is in the dynamically loaded libzest.so library. Knowing which side might be responsible for the issue could narrow things down slightly.

I think the last time this issue came up on IRC (or perhaps discord?) my stance was that it was likely a host issue with regards to setting up a usable OpenGL context for which the plugin's UI callbacks to run within.

alex-tee commented 3 years ago

I'm not on guix anymore so I built the latest version the provided script and the UI shows properly now! however it still crashes when suil calls cleanup() on the LV2 descriptor:

[INFO:Zyn] zest_close()
[INFO] Closing MRuby Application...

Thread 1 "zrythm" received signal SIGSEGV, Segmentation fault.
br_destroy_schema (sch=...) at src/schema.c:59
59              free(sch.handles[i].opts->ids);
(gdb) bt
#0  br_destroy_schema (sch=...) at src/schema.c:59
#1  0x00007fffb41c035f in mrb_remote_free (mrb=<optimized out>, ptr=0x55558a3e96a0) at /home/alex/Documents/git/zyn-fusion-build/mruby-zest-build/src/mruby-widget-lib/src/gem.c:416
#2  0x00007fffb414274b in obj_free (end=1, obj=0x55558a4220e0, mrb=0x55558a3a99a0) at /home/alex/Documents/git/zyn-fusion-build/mruby-zest-build/mruby/src/gc.c:894
#3  free_heap (gc=<optimized out>, gc=<optimized out>, mrb=0x55558a3a99a0) at /home/alex/Documents/git/zyn-fusion-build/mruby-zest-build/mruby/src/gc.c:434
#4  mrb_gc_destroy (mrb=0x55558a3a99a0, gc=0x55558a3a9a58) at /home/alex/Documents/git/zyn-fusion-build/mruby-zest-build/mruby/src/gc.c:443
#5  0x00007fffb4154ff2 in mrb_close (mrb=0x55558a3a99a0) at /home/alex/Documents/git/zyn-fusion-build/mruby-zest-build/mruby/src/state.c:194
#6  0x00007fffb41c1779 in zest_close (z=0x55558a328700) at /home/alex/Documents/git/zyn-fusion-build/mruby-zest-build/src/mruby-widget-lib/src/api.c:220
#7  0x00007fffd846889d in ZynAddSubFXUI::~ZynAddSubFXUI() () at /home/alex/local/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so
#8  0x00007fffd84672b1 in DISTRHO::lv2ui_cleanup(void*) () at /home/alex/local/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so
#9  0x0000555555dec72b in on_plug_removed (sock=0x5555894aed80, data=0x0) at ../src/plugins/lv2/suil/x11_in_gtk3.c:108
alex-tee commented 3 years ago

some more debug info:

(gdb) p sch
$1 = {
  json = <optimized out>,
  handles = 0x55558a5206c0,
  elements = 1138
}
(gdb) p sch.handles
$2 = (schema_handle_t *) 0x55558a5206c0
(gdb) p sch.handles[i]
$3 = {
  flag = 0,
  opts = 0xffffffea,
  pattern = 0x55558a4086c0 "/part[0,15]/kit[0,15]/padpars/FreqLfo/PLFOtype",
  name = 0x55558a475850 "PLFOtype",
  short_name = 0x55558a408700 "type",
  units = 0x0,
  documentation = 0x55558a4758c0 "Shape of LFO",
  scale = 0x0,
  default_ = 0x55558a475cb0 "sine",
  type = 105 'i',
  value_min = 0,
  value_max = 0
}
(gdb) p sch.handles[i].opts
$4 = (opt_t *) 0xffffffea
(gdb) p sch.handles[i].opts->
ids       labels    num_opts  
(gdb) p sch.handles[i].opts->ids
Cannot access memory at address 0xffffffea
alex-tee commented 3 years ago

this is all I get from valgrind:

==387085== Invalid read of size 8
==387085==    at 0x69F691D7: br_destroy_schema (schema.c:59)
==387085==    by 0x69F0F35E: mrb_remote_free (gem.c:416)
==387085==    by 0x69E9174A: obj_free (gc.c:894)
==387085==    by 0x69E9174A: free_heap (gc.c:434)
==387085==    by 0x69E9174A: mrb_gc_destroy (gc.c:443)
==387085==    by 0x69EA3FF1: mrb_close (state.c:194)
==387085==    by 0x69F10778: zest_close (api.c:220)
==387085==    by 0x571E989C: ZynAddSubFXUI::~ZynAddSubFXUI() (in /home/alex/local/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so)
==387085==    by 0x571E82B0: DISTRHO::lv2ui_cleanup(void*) (in /home/alex/local/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so)
==387085==    by 0x9A072A: on_plug_removed (x11_in_gtk3.c:108)
==387085==    by 0x48F4036: ??? (in /usr/lib/libgtk-3.so.0.2404.22)
==387085==    by 0x5491071: g_closure_invoke (in /usr/lib/libgobject-2.0.so.0.6600.7)
==387085==    by 0x54B9A84: ??? (in /usr/lib/libgobject-2.0.so.0.6600.7)
==387085==    by 0x54ACC0A: g_signal_emit_valist (in /usr/lib/libgobject-2.0.so.0.6600.7)
==387085==  Address 0xffffffea is not stack'd, malloc'd or (recently) free'd
fundamental commented 3 years ago

Hm. I was hoping to clean this up by essentially allowing multiple free calls going into br_destroy_schema(). I might still end up doing that, but the old code is pass by value, so that doesn't quite work as I intended. I guess I've got to setup Zrythm at some point to replicate the behavior. I'm guessing it's an easy fix. No idea why obj_free() appears to be called multiple times though on the same object.

fundamental commented 3 years ago

Zrythm does not appear to run properly on my system after building from source. Something about a GLib-GIO-ERROR, I'll leave this issue for someone else to resolve as I really don't want to be battling with gtk errors.

alex-tee commented 3 years ago

should I send you a precompiled package (that includes debug symbols)? what distro do you use?

fundamental commented 3 years ago

I'm running Slackware-current on my primary development machine. I'm not sure that a precompiled fully solves the issue as I suspect the problem may be on the host side (given that the bug is not exhibited in the same way with other hosts). If it's precompiled I can't effectively inspect and modify host behavior to resolve the issue if it isn't clearly on zyn's side.