From 7bc59b50e061632d234b510ddcbcf01682fceb90 Mon Sep 17 00:00:00 2001 From: milek7 Date: Sat, 16 Mar 2019 21:39:49 +0100 Subject: [PATCH] fix python window double-free --- application.cpp | 10 ++++++---- application.h | 2 +- pythonscreenviewer.cpp | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/application.cpp b/application.cpp index 6077cc15..426c7488 100644 --- a/application.cpp +++ b/application.cpp @@ -470,7 +470,7 @@ void eu07_application::on_focus_change(bool focus) { } GLFWwindow * -eu07_application::window( int const Windowindex, bool visible, int width, int height, GLFWmonitor *monitor ) { +eu07_application::window( int const Windowindex, bool visible, int width, int height, GLFWmonitor *monitor, bool keep_ownership ) { if( Windowindex >= 0 ) { return ( @@ -483,9 +483,11 @@ eu07_application::window( int const Windowindex, bool visible, int width, int he glfwWindowHint( GLFW_VISIBLE, visible ); auto *childwindow = glfwCreateWindow( width, height, "eu07helper", monitor, m_windows.front() ); - if( childwindow != nullptr ) { - m_windows.emplace_back( childwindow ); - } + if (!childwindow) + return nullptr; + + if (keep_ownership) + m_windows.emplace_back( childwindow ); glfwFocusWindow(m_windows.front()); // restore focus to main window diff --git a/application.h b/application.h index aebbf102..8ef61842 100644 --- a/application.h +++ b/application.h @@ -78,7 +78,7 @@ public: on_focus_change(bool focus); // gives access to specified window, creates a new window if index == -1 GLFWwindow * - window(int const Windowindex = 0 , bool visible = false, int width = 1, int height = 1, GLFWmonitor *monitor = nullptr); + window(int const Windowindex = 0 , bool visible = false, int width = 1, int height = 1, GLFWmonitor *monitor = nullptr, bool keep_ownership = true); GLFWmonitor * find_monitor(const std::string &str); // generate network sync verification number diff --git a/pythonscreenviewer.cpp b/pythonscreenviewer.cpp index 4afbeec1..ce8e9595 100644 --- a/pythonscreenviewer.cpp +++ b/pythonscreenviewer.cpp @@ -22,7 +22,7 @@ python_screen_viewer::python_screen_viewer(GLuint src, std::string surfacename) conf.offset = viewport.offset; conf.scale = viewport.scale; conf.window = Application.window(-1, true, conf.size.x, conf.size.y, - Application.find_monitor(viewport.monitor)); + Application.find_monitor(viewport.monitor), false); glfwSetWindowUserPointer(conf.window, this); glfwSetFramebufferSizeCallback(conf.window, texture_window_fb_resize);