Release NSGLView, fixes heap-use-after-free
This commit is contained in:
@@ -562,6 +562,16 @@ GtkCanvas::GtkCanvas ()
|
||||
Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
||||
}
|
||||
|
||||
GtkCanvas::~GtkCanvas ()
|
||||
{
|
||||
_in_dtor = true;
|
||||
#ifdef __APPLE__
|
||||
if (_nsglview) {
|
||||
Gtkmm2ext::nsglview_destroy (_nsglview);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
GtkCanvas::set_single_exposure (bool yn)
|
||||
{
|
||||
|
||||
@@ -218,7 +218,7 @@ class LIBCANVAS_API GtkCanvas : public Canvas, public Gtk::EventBox, public Gtkm
|
||||
{
|
||||
public:
|
||||
GtkCanvas ();
|
||||
~GtkCanvas () { _in_dtor = true ; }
|
||||
~GtkCanvas ();
|
||||
|
||||
void use_nsglview (bool retina = true);
|
||||
|
||||
|
||||
@@ -26,9 +26,11 @@ namespace Gtkmm2ext
|
||||
class CairoCanvas;
|
||||
|
||||
void* nsglview_create (CairoCanvas*, bool use_backing_scale);
|
||||
void nsglview_destroy (void*);
|
||||
void nsglview_overlay (void*, GdkWindow*);
|
||||
void nsglview_resize (void*, int x, int y, int w, int h);
|
||||
void nsglview_queue_draw (void*, int x, int y, int w, int h);
|
||||
void nsglview_set_visible (void*, bool);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -396,6 +396,14 @@ Gtkmm2ext::nsglview_create (Gtkmm2ext::CairoCanvas* canvas, bool use_backing_sca
|
||||
return gl_view;
|
||||
}
|
||||
|
||||
void
|
||||
Gtkmm2ext::nsglview_destroy (void* glv)
|
||||
{
|
||||
ArdourCanvasOpenGLView* gl_view = (ArdourCanvasOpenGLView*) glv;
|
||||
[gl_view removeFromSuperview];
|
||||
[gl_view release];
|
||||
}
|
||||
|
||||
void
|
||||
Gtkmm2ext::nsglview_overlay (void* glv, GdkWindow* window)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user