diff options
author | Harald Fernengel <harald@trolltech.com> | 2009-06-15 14:17:17 +0200 |
---|---|---|
committer | Harald Fernengel <harald@trolltech.com> | 2009-06-15 14:17:17 +0200 |
commit | 217d263ee1feb5a0c2b19d634093f4c7975ac7c9 (patch) | |
tree | 72bdeece4c24b515926a6904b53d484e61b3d534 /src/gui/painting/qpainterpath.cpp | |
parent | 2a91ca517826c8a4e5f432ad026106542f02f852 (diff) | |
download | qt4-tools-217d263ee1feb5a0c2b19d634093f4c7975ac7c9.tar.gz |
Fixes leak introduced by QScopedPointer
QPainterPath is kinda evil with a somewhat public private class and a
really private cast, so we need to up-cast the d pointer when deleting.
RevBy: aportale
Diffstat (limited to 'src/gui/painting/qpainterpath.cpp')
-rw-r--r-- | src/gui/painting/qpainterpath.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index 12dbc62fcc..635218e271 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -73,6 +73,24 @@ QT_BEGIN_NAMESPACE +struct QPainterPathPrivateHandler +{ + static inline void cleanup(QPainterPathPrivate *d) + { + // note - we must up-cast to QPainterPathData since QPainterPathPrivate + // has a non-virtual destructor! + if (d && !d->ref.deref()) + delete static_cast<QPainterPathData *>(d); + } + + static inline void reset(QPainterPathPrivate *&d, QPainterPathPrivate *other) + { + QPainterPathPrivate *oldD = d; + d = other; + cleanup(oldD); + } +}; + // This value is used to determine the length of control point vectors // when approximating arc segments as curves. The factor is multiplied // with the radius of the circle. |