clang-tidy: Avoid potential memory leak in BufferViewManager
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 4 Sep 2018 21:19:22 +0000 (23:19 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 6 Sep 2018 06:02:07 +0000 (08:02 +0200)
Explicitly delete a freshly created BufferViewConfig in case it cannot
be added, rather than relying on QObject parentship - clang-tidy
warns about that. I'm rather sure that this is a false positive, but
better safe than sorry.

Simplify and clean-up related code a bit.

src/common/bufferviewmanager.cpp
src/common/bufferviewmanager.h
src/core/corebufferviewmanager.cpp

index 64af01e..41cdd46 100644 (file)
@@ -47,25 +47,28 @@ BufferViewConfig *BufferViewManager::bufferViewConfigFactory(int bufferViewConfi
 }
 
 
-void BufferViewManager::addBufferViewConfig(BufferViewConfig *config)
+void BufferViewManager::addBufferViewConfig(int bufferViewConfigId)
 {
-    if (_bufferViewConfigs.contains(config->bufferViewId()))
+    if (_bufferViewConfigs.contains(bufferViewConfigId)) {
         return;
+    }
 
-    _proxy->synchronize(config);
-    _bufferViewConfigs[config->bufferViewId()] = config;
-    int bufferViewId = config->bufferViewId();
-    SYNC_OTHER(addBufferViewConfig, ARG(bufferViewId))
-    emit bufferViewConfigAdded(bufferViewId);
+    addBufferViewConfig(bufferViewConfigFactory(bufferViewConfigId));
 }
 
 
-void BufferViewManager::addBufferViewConfig(int bufferViewConfigId)
+void BufferViewManager::addBufferViewConfig(BufferViewConfig *config)
 {
-    if (_bufferViewConfigs.contains(bufferViewConfigId))
+    if (_bufferViewConfigs.contains(config->bufferViewId())) {
+        delete config;
         return;
+    }
 
-    addBufferViewConfig(bufferViewConfigFactory(bufferViewConfigId));
+    _proxy->synchronize(config);
+    _bufferViewConfigs[config->bufferViewId()] = config;
+    int bufferViewId = config->bufferViewId();
+    SYNC_OTHER(addBufferViewConfig, ARG(bufferViewId))
+    emit bufferViewConfigAdded(bufferViewId);
 }
 
 
@@ -96,10 +99,7 @@ QVariantList BufferViewManager::initBufferViewIds() const
 
 void BufferViewManager::initSetBufferViewIds(const QVariantList bufferViewIds)
 {
-    QVariantList::const_iterator iter = bufferViewIds.constBegin();
-    QVariantList::const_iterator iterEnd = bufferViewIds.constEnd();
-    while (iter != iterEnd) {
-        newBufferViewConfig((*iter).value<int>());
-        ++iter;
+    for (auto &&id : bufferViewIds) {
+        addBufferViewConfig(id.value<int>());
     }
 }
index 887d338..fcfb7d0 100644 (file)
@@ -43,12 +43,6 @@ public:
     BufferViewConfig *bufferViewConfig(int bufferViewId) const;
 
 public slots:
-    void addBufferViewConfig(BufferViewConfig *config);
-    void addBufferViewConfig(int bufferViewConfigId);
-    inline void newBufferViewConfig(int bufferViewConfigId)  { addBufferViewConfig(bufferViewConfigId); }
-
-    void deleteBufferViewConfig(int bufferViewConfigId);
-
     QVariantList initBufferViewIds() const;
     void initSetBufferViewIds(const QVariantList bufferViewIds);
 
@@ -70,6 +64,10 @@ protected:
     inline const BufferViewConfigHash &bufferViewConfigHash() { return _bufferViewConfigs; }
     virtual BufferViewConfig *bufferViewConfigFactory(int bufferViewConfigId);
 
+    void addBufferViewConfig(BufferViewConfig *config);
+    void addBufferViewConfig(int bufferViewConfigId);
+    void deleteBufferViewConfig(int bufferViewConfigId);
+
 private:
     BufferViewConfigHash _bufferViewConfigs;
     SignalProxy *_proxy;
index e79a6d6..87a4192 100644 (file)
@@ -74,8 +74,7 @@ void CoreBufferViewManager::requestCreateBufferView(const QVariantMap &propertie
     }
     maxId++;
 
-    CoreBufferViewConfig *config = new CoreBufferViewConfig(maxId, properties);
-    addBufferViewConfig(config);
+    addBufferViewConfig(new CoreBufferViewConfig(maxId, properties, this));
 }