On macOS, winit will try to release all related resources after a window is dropped. And surfman's macos system surface also contains wrappers of CALayer for its layer and superlayer field which will also try to free when dropping. If either winit window or Surfman surface decides to drop, it will cause use after free to each other.
If winit window is dropped first, surfman will get:
On macOS, winit will try to release all related resources after a window is dropped. And surfman's macos system surface also contains wrappers of CALayer for its layer and superlayer field which will also try to free when dropping. If either winit window or Surfman surface decides to drop, it will cause use after free to each other.
If winit window is dropped first, surfman will get:
If surfman surface is dropped first, winit window will get:
This PR tries to add a reference count when creating the surface. This should set the correct reference count for both of them to drop.