diff --git a/linux/main.cpp b/linux/main.cpp index 697941164..4d5474c02 100644 --- a/linux/main.cpp +++ b/linux/main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -13,7 +14,7 @@ #include -GLFWView *view = nullptr; +std::unique_ptr view; void quit_handler(int) { if (view) { @@ -62,7 +63,7 @@ int main(int argc, char *argv[]) { sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL); - view = new GLFWView(); + view = mbgl::util::make_unique(); mbgl::SQLiteCache cache("/tmp/mbgl-cache.db"); mbgl::DefaultFileSource fileSource(&cache); diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 601ae0ec2..fd9c701f9 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -11,6 +11,7 @@ GLFWView::GLFWView(bool fullscreen_) : fullscreen(fullscreen_) { } GLFWView::~GLFWView() { + glfwDestroyWindow(window); glfwTerminate(); } diff --git a/scripts/valgrind.sup b/scripts/valgrind.sup new file mode 100644 index 000000000..fcde049d9 --- /dev/null +++ b/scripts/valgrind.sup @@ -0,0 +1,91 @@ +{ + Valgrind gets confused with buffers managed by the graphics driver + Memcheck:Leak + ... + obj:/usr/*/dri/r600_dri.so + ... +} +{ + GLFW _glfwCreateCursor() + Memcheck:Leak + match-leak-kinds: reachable + ... + obj:/usr/*/libX11.so.6.3.0 + ... + fun:_glfwCreateCursor + ... +} +{ + GLFW _glfwPlatform*() + Memcheck:Leak + match-leak-kinds: reachable + ... + fun:_glfwPlatform* + ... +} +{ + Buffer managed by OpenGL? + Memcheck:Cond + ... + fun:_ZN4mbgl*Uniform* + ... + fun:_ZN8GLFWView10invalidateEv + ... +} +{ + Buffer managed by OpenGL? + Memcheck:Cond + fun:_ZNSt7__equalILb0EE5equalIPKfS3_EEbT_S4_T0_ + ... + fun:_ZN4mbgl7Painter11renderLayerERKNS_10StyleLayerEPKNS_4Tile2IDEPKSt5arrayIfLm16EE +} +{ + Valgrind doesn't like our make_unique (C++14 polyfill) + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:_ZN4mbgl4util11make_unique* + ... +} +{ + dlopen doing its magic + Memcheck:Leak + match-leak-kinds: reachable + ... + fun:_dl_open + ... +} +{ + X11 false positive + Memcheck:Leak + match-leak-kinds: reachable + ... + obj:/usr/*/libX11.so.6.3.0 + ... + fun:_XrmInitParseInfo + ... +} +{ + OpenSSL false positive + Memcheck:Leak + ... + fun:CRYPTO_malloc + ... +} +{ + OpenSSL false positive + Memcheck:Leak + ... + fun:CRYPTO_realloc + ... +} +{ + Libcurl false positive + Memcheck:Leak + fun:malloc + ... + obj:/usr/*/libcurl.so.4.3.0 + fun:curl_multi_socket_action + ... +} diff --git a/src/mbgl/geometry/line_atlas.cpp b/src/mbgl/geometry/line_atlas.cpp index bf6944fbc..8be1a8d53 100644 --- a/src/mbgl/geometry/line_atlas.cpp +++ b/src/mbgl/geometry/line_atlas.cpp @@ -19,6 +19,7 @@ LineAtlas::~LineAtlas() { std::lock_guard lock(mtx); MBGL_CHECK_ERROR(glDeleteTextures(1, &texture)); + delete[] data; texture = 0; }