From c832df0783e2926dab76eb5bc9d7c5d583bb9cd7 Mon Sep 17 00:00:00 2001 From: Kai Ludwig Date: Sat, 24 May 2014 21:22:34 +0200 Subject: [PATCH] added missing locking against crashing in Overlays::~Overlays() --- interface/src/ui/overlays/Overlays.cpp | 28 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index da7b05ead7..6c6c314be4 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -22,16 +22,26 @@ Overlays::Overlays() : _nextOverlayID(1) { } Overlays::~Overlays() { - QMap::iterator it; - for (it = _overlays2D.begin(); it != _overlays2D.end(); ++it) { - delete _overlays2D.take(it.key()); - } - for (it = _overlays3D.begin(); it != _overlays3D.end(); ++it) { - delete _overlays3D.take(it.key()); - } - while (!_overlaysToDelete.isEmpty()) { - delete _overlaysToDelete.takeLast(); + + { + QWriteLocker lock(&_lock); + foreach(Overlay* thisOverlay, _overlays2D) { + delete thisOverlay; + } + _overlays2D.clear(); + foreach(Overlay* thisOverlay, _overlays3D) { + delete thisOverlay; + } + _overlays3D.clear(); + } + + if (!_overlaysToDelete.isEmpty()) { + QWriteLocker lock(&_deleteLock); + do { + delete _overlaysToDelete.takeLast(); + } while (!_overlaysToDelete.isEmpty()); } + } void Overlays::init(QGLWidget* parent) {