Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[X11] Fixed BadWindow error on shutdown

This was caused by calling XDestroyWindow inside Dispose(), or
by processing events after calling XDestroyWindow. Pending events
are now discarded when Close() is called and not cancelled, and
XDestroyWindow is only called if the window exists.
  • Loading branch information...
commit ec31675fc87883cb81c4df3498385a7fe54eae09 1 parent ade8e61
@thefiddler thefiddler authored
Showing with 11 additions and 21 deletions.
  1. +11 −21 Source/OpenTK/Platform/X11/X11GLNative.cs
View
32 Source/OpenTK/Platform/X11/X11GLNative.cs
@@ -831,12 +831,8 @@ public override void ProcessEvents()
if (!ce.Cancel)
{
isExiting = true;
-
- Debug.WriteLine("Destroying window.");
- using (new XLock(window.Display))
- {
- Functions.XDestroyWindow(window.Display, window.Handle);
- }
+ DestroyWindow();
+ OnClosed(EventArgs.Empty);
break;
}
}
@@ -846,9 +842,6 @@ public override void ProcessEvents()
case XEventName.DestroyNotify:
Debug.WriteLine("Window destroyed");
exists = false;
-
- OnClosed(EventArgs.Empty);
-
return;
case XEventName.ConfigureNotify:
@@ -1653,7 +1646,9 @@ public void DestroyWindow()
Debug.WriteLine("X11GLNative shutdown sequence initiated.");
using (new XLock(window.Display))
{
+ Functions.XSync(window.Display, true);
Functions.XDestroyWindow(window.Display, window.Handle);
+ exists = false;
}
}
@@ -1711,20 +1706,15 @@ protected override void Dispose(bool manuallyCalled)
{
if (window != null && window.Handle != IntPtr.Zero)
{
- if (Exists)
+ Functions.XFreeCursor(window.Display, EmptyCursor);
+ if(cursorHandle != IntPtr.Zero)
{
- using (new XLock(window.Display))
- {
- if(cursorHandle != IntPtr.Zero)
- {
- Functions.XFreeCursor(window.Display, cursorHandle);
- }
- Functions.XFreeCursor(window.Display, EmptyCursor);
- Functions.XDestroyWindow(window.Display, window.Handle);
- }
+ Functions.XFreeCursor(window.Display, cursorHandle);
+ }
- while (Exists)
- ProcessEvents();
+ if (Exists)
+ {
+ DestroyWindow();
}
window.Dispose();
Please sign in to comment.
Something went wrong with that request. Please try again.