Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux OpenGL应用程序导致Xorg泄漏_Linux_Qt_Opengl_Memory Leaks_Nvidia - Fatal编程技术网

Linux OpenGL应用程序导致Xorg泄漏

Linux OpenGL应用程序导致Xorg泄漏,linux,qt,opengl,memory-leaks,nvidia,Linux,Qt,Opengl,Memory Leaks,Nvidia,我正在开发一个相当大的Qt5/OpenGL应用程序。 每次应用程序在具有nvidia驱动程序的linux上运行并退出,且合成器处于活动状态时,nvidia smi显示Xorg进程的VRAM使用量增加了4Mb 我的立场是,即使我的应用程序泄漏,当它被销毁时,所有内容都应该被释放,但事实似乎并非如此 在这个帖子中,有人提到如果共享“显示列表”,情况就不会这样了 我对OpenGL了解不多,在网上也找不到关于这个问题的相关信息 我的目标是了解这是如何发生的,它可能来自我的代码中,以及如何修复它 注: 在

我正在开发一个相当大的Qt5/OpenGL应用程序。 每次应用程序在具有nvidia驱动程序的linux上运行并退出,且合成器处于活动状态时,nvidia smi显示Xorg进程的VRAM使用量增加了4Mb

我的立场是,即使我的应用程序泄漏,当它被销毁时,所有内容都应该被释放,但事实似乎并非如此

在这个帖子中,有人提到如果共享“显示列表”,情况就不会这样了

我对OpenGL了解不多,在网上也找不到关于这个问题的相关信息

我的目标是了解这是如何发生的,它可能来自我的代码中,以及如何修复它

注:

在我的应用程序停止后,Xorg中存在漏洞,nvidia smi中未显示Xorg和桌面环境相关的其他进程

我使用的DE并不重要(经过测试:KDE、Lxde、OpenBox、Gnome、Unity)

我使用的Linux发行版(几乎)并不重要(经过测试:Ubuntu 16.04、Ubuntu 18.04、fedora 26)(尚未在ArchLinux上复制,我们仍在调查此问题)


nvidia驱动程序版本无关紧要,测试了340、384、390。

通过密集的调试会话,问题得以解决

泄漏是由于删除之前包含QVTKOpenGLWindow的windowContainer的父级为空而导致的

当我们使用QOpenGLWidget时,这段代码就在这里,它没有引起任何问题。在任何情况下,在删除前为小部件设置NULL父项都是无用的,因此删除该行可以解决问题


即使在这种情况下,也不应该发生这种泄漏,所以我打开了一个Qt来报告它。

只是想让隐秘的“啊,为什么我没有注意到呢?”闪开:你确定,你的进程实际上终止了吗?尽管最后一个窗口已关闭,但经常会忘记实际终止主事件循环/进程。这是一个很好的评论。是的,我肯定。我已经更新了我的问题。如果合成器不处于活动状态,漏洞就会消失。我不明白为什么要将该小部件的父项设置为NULL。不知道,2009年另一个开发人员做了这件事,可能与Qt4有关?我只知道这些。在任何情况下都没有理由这样做,因此删除它可以解决问题。