Details
-
Bug
-
Resolution: Unresolved
-
P1: Critical
-
None
-
5.14.0
-
None
-
linux/amd64/x11
Description
I build qt 5.14 with:
./configure -v -opensource -developer-build -confirm-license -nomake tests -nomake examples -sanitize address -sanitize undefined -prefix /usr/local/qt5_debug -qt-libjpeg -qt-zlib -qt-libpng -use-gold-linker -recheck-all
If I run
#include <QApplication> #include <QLabel> #include <QScroller> static void my_kinetic_scroll_for_widget(QWidget &view) { auto scroller = QScroller::scroller(&view); assert(scroller != nullptr); assert(scroller->target() == &view); QScrollerProperties properties = QScroller::scroller(scroller)->scrollerProperties(); QVariant overshootPolicy = QVariant::fromValue<QScrollerProperties::OvershootPolicy>( QScrollerProperties::OvershootAlwaysOff); properties.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, overshootPolicy); scroller->setScrollerProperties(properties); properties.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, overshootPolicy); scroller->setScrollerProperties(properties); // Scrolling Gesture if (qApp->property("use-touchscreen").toBool()) { scroller->grabGesture(&view, QScroller::TouchGesture); } else { scroller->grabGesture(&view, QScroller::LeftMouseButtonGesture); } } int main(int argc, char *argv[]) { QApplication app{ argc, argv }; QLabel lbl; my_kinetic_scroll_for_widget(lbl); lbl.resize(400, 400); lbl.show(); return app.exec(); }
I got:
```
Direct leak of 16 byte(s) in 1 object(s) allocated from:
#0 0x7f5679e5a968 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:104
#1 0x7f566e4606fc in QScroller::grabGesture(QObject*, QScroller::ScrollerGestureType) util/qscroller.cpp:419
#2 0x560a5bab8384 in my_kinetic_scroll_for_widget main.cpp:25
#3 0x560a5bab8384 in main.cpp:33
#4 0x7f565243d022 in __libc_start_main (/usr/lib/libc.so.6+0x27022)
```
In other words there is memory leak here:
scroller->grabGesture(&view, QScroller::LeftMouseButtonGesture);
There is no such issue in previous version (I am not sure what version I use before, I suppose 5.12).
If I revert this patch:
commit 7d73d4b9a93b3132c1a24aa3ae77f0a307e821fd Author: Andy Shaw <andy.shaw@qt.io> Date: Tue Aug 20 10:53:53 2019 +0200 Remove the unregistered recognizer from the main list This amends 1320b2f64412f0d86bd09c66c22df845e13a94a1 to keep the behavior of removing from the main list but without re-introducing the memory leak. Fixes: QTBUG-77770 Change-Id: I91fa6cb71fab8d60baa35417fdb34322af11dbbb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
asan stops report memory leak, so I suppose Qt version before that commit
is not affected by this issue.