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:
parent
381f1dd2c9
commit
1f24a4e520
|
@ -42,11 +42,20 @@ public:
|
||||||
context.MakeCurrent();
|
context.MakeCurrent();
|
||||||
}
|
}
|
||||||
~Scoped() {
|
~Scoped() {
|
||||||
|
if (active) {
|
||||||
context.DoneCurrent();
|
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
|
||||||
|
|
Reference in New Issue