Chronial / foo_chronflow

A coverflow plugin for foobar
GNU General Public License v2.0
66 stars 6 forks source link

crash after display driver restart #5

Closed veksha closed 4 years ago

veksha commented 4 years ago
  1. use Custom Resolution Utility (CRU) "restart64.exe" executable file to restart display driver.
  2. foobar2000 with coverflow plugin crashes.
Chronial commented 4 years ago

Thanks for reporting. I can reproduce this, but I have no Idea what to do about it. It seems to be the display driver killing foobar2000.

If anybody has any input on what can be done here, I'll be happy to hear.

veksha commented 4 years ago

I have a suggestion.

this is Api Monitor log after foobar2000 crashes:

image

I think you might try to catch those two errors before nvoglv32.dll (nvidia opengl driver) will fail. EnumDisplayDevicesA seems to be faster then EnumDisplayMonitors according to "Duration" column.

But it could be an overkill and affect FPS a little. if you feel like you can give it a try, go for it. :-) this "bug" is low priority, i think.

if EnumDisplayDevicesA will return FALSE just skip drawing of opengl. In theory this should fix crash. after that you can recreate opengl device context and continue drawing.

Chronial commented 4 years ago

EnumDisplayDevices does not fail for me. But I think found another way to reliably handle display driver crashes. I'll implement it this week if I find the time.

Chronial commented 4 years ago

I managed to get this to a place where foo_chronflow doesn't take down all of foobar anymore. Instead only the component crashes with a sensible error message. I tried to recreate the component window, but the graphics driver restart leaves my OpenGL helper GLFW in a broken state that it can't recover from.

veksha commented 4 years ago

Hello. Can I get new compiled version to try?

Chronial commented 4 years ago

Sure thing, give this a try: foo_chronflow-graphiccrash.zip

veksha commented 4 years ago

@Chronial thank you. It does not load. Foobar2000 shows message: Failed to load DLL: foo_chronflow.dll Reason: The specified procedure was not found.

EDIT: sorry. it works now, for some reason.