emu_window: Create a way to Cancel the exit of a Scoped

If a GraphicsContext is destroyed before its Scoped is destroyed, this
causes a crash as the Scoped tries to call a method in the destroyed
context on exit.

Add a way to Cancel the call when we know that calling the
GraphicsContext will not work.
This commit is contained in:
lat9nq 2022-03-07 03:35:34 -05:00
parent 381f1dd2c9
commit 1f24a4e520
1 changed files with 10 additions and 1 deletions

View File

@ -42,11 +42,20 @@ public:
context.MakeCurrent(); context.MakeCurrent();
} }
~Scoped() { ~Scoped() {
context.DoneCurrent(); if (active) {
context.DoneCurrent();
}
}
/// In the event that context was destroyed before the Scoped is destroyed, this provides a
/// mechanism to prevent calling a destroyed object's method during the deconstructor
void Cancel() {
active = false;
} }
private: private:
GraphicsContext& context; GraphicsContext& context;
bool active{true};
}; };
/// Calls MakeCurrent on the context and calls DoneCurrent when the scope for the returned value /// Calls MakeCurrent on the context and calls DoneCurrent when the scope for the returned value