1
3rd Party Plugins - (fb2k) / Re: foo_vis_vumeter
Last post by oops -Took me a while to test.@Defender this is very methodical. Wow!
To make fullscreen not crash in PSS I needed to add a couple of exception using it's GUID:
Code: [Select]
if (m_host->get_host_guid() != guid_foo_uie_panel_splitter)The exception was needed because PSS calling destruct on my visualizer leading to the crash. I copied that part of the fullscreen code from foo_vis_spectrum_analyzer since it was/is the only other CUI panel I know that does fullscreen and is open source. I have to admit that I don't really know why it is needed so I've left the ownership in as it is working and only apply the workaround when the host/parent? is PSS. Maybe someone with better CUI internals understanding can illuminate us.
m_host->relinquish_ownership(nullptr);
...
if (m_host->get_host_guid() != guid_foo_uie_panel_splitter)
m_host->relinquish_ownership(m_parent);
Why do I mention that? Because, the crash (at least in the dump you posted) is not inside VU 2024 (as you call it). There is nothing but disassembly to look at making it really, really, really complex to step through and understand what happened. We're going to have a difficult conversation of where to draw the line on what is possible to work with and the expectations.
All these "legacy plugins" that have not been updated in a decade or more and are blackboxes are constantly getting harder to work with. One component cannot workaround all of the corner case issues that might present. We need to make hard/unpopular choices and/or live with the tradeoffs. Furthermore, most of my testing time is done on x64 (and some smaller portion on ARM64EC), migrated what I could from x86 several months ago and only have a testing instance with milk2 and vu running.
Since most of the "legacy plugins" are not showing bad behavior. We'll table that conversation for the time being.
Looking at ELP, one of the last few things it does is GetWindowLong(), meaning it is trying to get window information. The dump header, if I read it correctly, is trying to read something that is already gone (use after free, access violation from null pointer).
I don't know if you added this or not into the log:
user_interface::shutdown=>destroy panel=>PSS Destroy=>destroy child panel=>destroy panel=>PSS Destroy=>destroy child panel=>destroy panel=>PSS Destroy=>destroy child panel
I think it points to something with that snippet I pasted. It could be that there is something VU 2024 is doing when going fullscreen that it is not liking. I switch out of the hosting window to go fullscreen (otherwise fullscreen is clipped to the size of the parent window's client area) and then reattach when coming back--the windows are not swapped like in DUI which is a whole other messy subject. Whatever I might be doing wrong in this process, I'm not sure. Whatever the expectations are of the child windows that I'm not meeting or following, I'm not sure either.
I don't know where to go from this point. Blocking fullscreen on ELP is an option. Doing the same/similar PSS workaround for ELP is another option--though I don't know how to tell that ELP is running or somewhere in the parent window chain.
Any tips/hints/help would be appreciated.