From 5088e935c7227ce3f8ae203c5b9832b96f5fe5c1 Mon Sep 17 00:00:00 2001 From: Fabian Paus <fabian.paus@kit.edu> Date: Thu, 21 May 2020 12:13:32 +0200 Subject: [PATCH] Use std instead of boost --- .../ArmarXGui/ArmarXMainWindow.cpp | 2 +- .../applications/ArmarXGui/ArmarXMainWindow.h | 4 +-- .../ArmarXGui/Widgets/ViewerWidget.cpp | 8 ++--- .../ArmarXGui/Widgets/ViewerWidget.h | 2 +- .../ConditionViewerWidgetController.cpp | 10 +++--- .../ConditionViewerWidgetController.h | 4 ++- .../ConditionViewerPlugin/TermNode.cpp | 10 +++--- .../ConditionViewerPlugin/TermNode.h | 7 ++-- .../widgets/ConditionViewerWidget.cpp | 10 +++--- .../widgets/ConditionViewerWidget.h | 4 ++- .../LoggingPlugin/ArmarXLogViewer/LogTable.h | 5 ++- .../ArmarXLogViewer/LogTableModel.cpp | 12 +++---- .../ArmarXLogViewer/LogTableModel.h | 4 +-- .../ArmarXLogViewer/LogViewer.cpp | 4 +-- .../LoggingPlugin/ArmarXLogViewer/LogViewer.h | 4 ++- .../PlotterPlugin/ArmarXPlotter.cpp | 6 ++-- .../gui-plugins/PlotterPlugin/ArmarXPlotter.h | 2 +- .../StaticPlotterWidgetController.cpp | 6 ++-- .../StaticPlotterWidgetController.h | 3 +- .../ScenarioManagerWidgetController.cpp | 1 - .../controller/ScenarioListController.cpp | 4 +-- .../controller/ScenarioListController.h | 8 +++-- .../gui/applicationdatabaseview.cpp | 2 +- .../gui/applicationdatabaseview.h | 9 ++--- .../model/StateTreeModel.cpp | 4 +-- .../model/StateTreeModel.h | 4 +-- .../IceStateConverter.cpp | 2 ++ .../StatechartViewerPlugin/StateWatcher.cpp | 28 +++++++-------- .../StatechartViewerPlugin/StateWatcher.h | 5 +-- .../StatechartViewerController.cpp | 8 ++--- .../StatechartViewerController.h | 4 ++- .../StatechartViewerPlugin/layout/Layout.h | 3 +- .../layout/LayoutWorker.cpp | 6 ++-- .../layout/StateModelLayoutMediator.cpp | 26 +++++++------- .../StatechartViewerPlugin/model/State.cpp | 3 +- .../model/stateinstance/StateInstance.cpp | 2 ++ .../view/TransitionItem.cpp | 4 ++- .../ArmarXManagerItem.cpp | 2 +- .../ArmarXManagerItem.h | 8 ++--- .../ArmarXManagerModel.cpp | 12 +++---- .../ArmarXManagerModel.h | 7 ++-- .../IceGridViewer/IceGridViewer.cpp | 12 +++---- .../IceGridViewer/IceGridViewer.h | 5 +-- .../IceGridViewer/model/AdapterInfoModel.h | 9 ++--- .../IceGridViewer/model/IceGridModel.cpp | 4 +-- .../IceGridViewer/model/IceGridModel.h | 4 +-- .../IceGridViewer/model/NodeInfoModel.h | 9 ++--- .../IceGridViewer/model/ServerInfoModel.h | 9 ++--- .../SystemStateMonitorWidget.cpp | 12 +++---- .../SystemStateMonitorWidget.h | 4 ++- .../ThreadViewer/RunningTaskModel.cpp | 4 +-- .../ThreadViewer/RunningTaskModel.h | 5 +-- .../ThreadViewer/ThreadViewer.cpp | 4 +-- .../ThreadViewer/ThreadViewer.h | 5 +-- .../ThreadViewer/ThreadViewerModel.cpp | 4 +-- .../ThreadViewer/ThreadViewerModel.h | 5 +-- .../libraries/ArmarXGuiBase/ArmarXGuiPlugin.h | 34 ++++--------------- .../ArmarXGuiBase/ArmarXWidgetController.cpp | 4 +-- .../ArmarXGuiBase/ArmarXWidgetController.h | 16 ++++++--- .../libraries/ArmarXGuiBase/PluginCache.cpp | 24 ++++++------- .../libraries/ArmarXGuiBase/PluginCache.h | 4 +-- .../ArmarXGuiBase/widgets/CoinViewer.cpp | 14 ++++---- .../ArmarXGuiBase/widgets/CoinViewer.h | 19 +++++++---- .../PlotterController/PlotterController.cpp | 16 ++++----- .../PlotterController/PlotterController.h | 5 +-- 65 files changed, 251 insertions(+), 239 deletions(-) diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp index 4d1107c4..dee84969 100644 --- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp +++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp @@ -124,7 +124,7 @@ namespace armarx // splashSceen->show(); ui = new ::Ui::ArmarXMainWindow(); - mutex3d.reset(new boost::recursive_mutex); + mutex3d = std::make_shared<std::recursive_mutex>(); ArmarXWidgetInfoPtr viewerWidgetInfo(new ArmarXWidgetInfo(ArmarXComponentWidgetController::createInstance<Viewer3DWidget>, Viewer3DWidget::GetWidgetIcon(), QIcon())); pluginCache.cacheWidget(ARMARX_VIEWER_NAME, viewerWidgetInfo); diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h index a57c5a5e..650431f3 100644 --- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h +++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h @@ -115,7 +115,7 @@ namespace armarx * \brief Provides access to the coin3d mutex. Use this mutex to protect access to the 3d scene. * \return */ - std::shared_ptr<boost::recursive_mutex> getMutex3D(); + std::shared_ptr<std::recursive_mutex> getMutex3D(); bool existsWidget(const QString& widgetName); QString getLibraryPathFromPackage(const QString& packageName); @@ -256,7 +256,7 @@ namespace armarx QToolButton* openWidgetButton; QLineEdit* searchField; AddArmarXWidgetAction* addWidgetAction; - boost::shared_ptr<boost::recursive_mutex> mutex3d; + std::shared_ptr<std::recursive_mutex> mutex3d; QMap<QString, QAction*> actionList; QLabel* favoritesLabel; diff --git a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp index 752346c1..1fa5a84c 100644 --- a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp +++ b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp @@ -79,7 +79,7 @@ namespace armarx return; } - ScopedRecursiveLockPtr l = viewer->getScopedLock(); + auto l = viewer->getScopedLock(); if (index < 0 || index >= cb3DViewers->count()) { @@ -147,7 +147,7 @@ namespace armarx // clear initialized views and reset node to apply loaded settings if (viewer) { - ScopedRecursiveLockPtr l = viewer->getScopedLock(); + auto l = viewer->getScopedLock(); selectedViews.clear(); setNode(cb3DViewers->currentIndex()); @@ -275,7 +275,7 @@ namespace armarx } } - void Viewer3DWidget::setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D) + void Viewer3DWidget::setMutex3D(RecursiveMutexPtr const& mutex3D) { this->mutex3D = mutex3D; if (viewer) @@ -341,7 +341,7 @@ namespace armarx return; } - ScopedRecursiveLockPtr l = viewer->getScopedLock(); + auto l = viewer->getScopedLock(); // ARMARX_INFO << "scene map size: " << sceneMap.size(); this->sceneMap = sceneMap; int oldIndex = cb3DViewers->currentIndex(); diff --git a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h index 947a1047..2f096cbc 100644 --- a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h +++ b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h @@ -79,7 +79,7 @@ namespace armarx * \brief This mutex is used to protect 3d scene updates. * \param mutex3D */ - void setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D) override; + void setMutex3D(RecursiveMutexPtr const& mutex3D) override; QPointer<QWidget> getCustomTitlebarWidget(QWidget* parent = 0) override; diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp index cf348498..3cd4b3c9 100644 --- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp +++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp @@ -48,7 +48,7 @@ namespace armarx handler = getProxy<ConditionHandlerInterfacePrx>("ConditionHandler"); if (handler) { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); QMetaObject::invokeMethod(__widget, "onConnect"); } refreshAction->setChecked(true); @@ -86,13 +86,13 @@ namespace armarx ConditionRegistry ConditionViewerWidgetController::getActiveConditions() { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); return currentConditions; } ConditionRegistry ConditionViewerWidgetController::getPastConditions() { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); return pastConditions; } @@ -116,7 +116,7 @@ namespace armarx if (handler) { auto removeResult = handler->begin_removeAllConditions(); - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); handler->end_removeAllConditions(removeResult); } } @@ -134,7 +134,7 @@ namespace armarx { auto pastResult = handler->begin_getPastConditions(); auto activeResult = handler->begin_getActiveConditions(); - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); pastConditions = handler->end_getPastConditions(pastResult); currentConditions = handler->end_getActiveConditions(activeResult); } diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h index e92aafc5..7c131ad2 100644 --- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h +++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h @@ -31,6 +31,8 @@ #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h> #include "widgets/ConditionViewerWidget.h" +#include <mutex> + class QToolBar; namespace armarx @@ -88,7 +90,7 @@ namespace armarx ConditionRegistry currentConditions; ConditionRegistry pastConditions; armarx::PeriodicTask<ConditionViewerWidgetController>::pointer_type updateTask; - Mutex dataMutex; + std::mutex dataMutex; QPointer<ConditionViewerWidget> __widget; QPointer<QToolBar> customToolbar; QAction* refreshAction; diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp index e7feb698..529d6cf0 100644 --- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp +++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp @@ -125,7 +125,7 @@ namespace armarx QString TermNode::getDatafieldValue() { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); try { @@ -149,7 +149,7 @@ namespace armarx void TermNode::setTermEvaluationState(bool truthy) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); if (truthy) { @@ -171,7 +171,7 @@ namespace armarx void TermNode::updateChecksTable(TermImplPtr term) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); LiteralImplPtr literal = LiteralImplPtr::dynamicCast(term); CheckConfiguration config = literal->getCheckConfiguration(); @@ -245,7 +245,7 @@ namespace armarx { bool truthy = false; { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); truthy = curDatafield && literaldatafieldName == curDatafield->getDataFieldIdentifier()->getIdentifierStr(); } @@ -285,7 +285,7 @@ namespace armarx void TermNode::updateValueString(const QString& valueString) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); checksTable->setItem(literalRow, eCurrentValueCol, new QTableWidgetItem(valueString)); } diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h index 27022776..6a3f43e3 100644 --- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h +++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h @@ -29,12 +29,12 @@ #include <ArmarXCore/core/system/ImportExportComponent.h> #include <ArmarXCore/observers/condition/TermImpl.h> #include <ArmarXCore/observers/variant/DatafieldRef.h> -#include <ArmarXCore/core/services/tasks/PeriodicTask.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXCore/interface/observers/ConditionHandlerInterface.h> #include <QTableWidget> +#include <mutex> + namespace armarx { class ARMARXCOMPONENT_IMPORT_EXPORT TermNode; @@ -101,8 +101,7 @@ namespace armarx int literalRow; std::string literaldatafieldName; DatafieldRefPtr curDatafield; - // armarx::PeriodicTask<TermNode>::pointer_type updateTask; - RecursiveMutex dataMutex; + std::recursive_mutex dataMutex; IceManagerPtr manager; ConditionHandlerInterfacePrx handler; diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp index 8416fbf4..cde510dd 100644 --- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp +++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp @@ -120,7 +120,7 @@ namespace armarx void ConditionViewerWidget::activeConditionItemSelected(const QItemSelection& selected, const QItemSelection& deselected) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); if (selected.indexes().size() == 0) { @@ -141,7 +141,7 @@ namespace armarx void ConditionViewerWidget::pastConditionItemSelected(const QItemSelection& selected, const QItemSelection& deselected) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); if (selected.indexes().size() == 0) { @@ -174,7 +174,7 @@ namespace armarx void ConditionViewerWidget::updateCondition(int conditionId, ConditionRootPtr& condition) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); scene->clear(); ui.checksTableWidget->clearContents(); ui.checksTableWidget->setRowCount(0); @@ -197,7 +197,7 @@ namespace armarx std::vector<TreeNodePtr> qtChildren; int conditionId = -1; { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); qtChildren.push_back(root); tempChildNodes = root->getChildren(); @@ -247,7 +247,7 @@ namespace armarx { if (event->timerId() == timerId) { - ScopedRecursiveLock lock(dataMutex); + std::unique_lock lock(dataMutex); // retrieve conditions activeConditions = controller->getActiveConditions(); pastConditions = controller->getPastConditions(); diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h index 9c1e8a4f..f43f75bf 100644 --- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h +++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h @@ -32,11 +32,13 @@ #include "../TermNode.h" #include <ArmarXCore/core/application/Application.h> +#include <ArmarXCore/core/services/tasks/PeriodicTask.h> #include <QMainWindow> #include <QWidget> #include <string> +#include <mutex> #include <map> @@ -73,7 +75,7 @@ namespace armarx ConditionItemModel* pastConditionsModel; ConditionRegistry activeConditions; ConditionRegistry pastConditions; - RecursiveMutex dataMutex; + std::recursive_mutex dataMutex; PeriodicTask<ConditionViewerWidget>::pointer_type updateTask; int timerId; diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h index 7c093180..0203b80a 100644 --- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h +++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h @@ -24,7 +24,6 @@ // ArmarX #include <ArmarXCore/core/logging/Logging.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXGui/libraries/ArmarXGuiBase/widgets/editorfileopener.h> @@ -34,6 +33,7 @@ // C++ #include <vector> +#include <mutex> #define ARMARX_LOG_TIMESTR "Time" #define ARMARX_LOG_COMPONENTSTR "Component" @@ -100,10 +100,9 @@ namespace armarx bool autoscrollActive; int newMessageCount; MessageType maxNewLogLevelType; - Mutex bufferMutex; + std::mutex bufferMutex; std::vector<LogMessage> logBuffer; QString currentLiveFilter, lastLiveFilter; - // std::map<int, QModelIndex>::const_reverse_iterator selectedSearchIndex; int selectedSearchIndex; EditorFileOpener fileOpener; diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp index cc4daccb..6a090648 100644 --- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp +++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp @@ -56,7 +56,7 @@ namespace armarx { case (int)UserRoles::FullMsgRole: { - ScopedLock lock(logEntriesMutex); + std::unique_lock lock(logEntriesMutex); if (row >= (signed int)logEntries.size() || row < 0) { return QString("n/A"); @@ -93,7 +93,7 @@ namespace armarx case Qt::DisplayRole: case Qt::ToolTipRole: { - ScopedLock lock(logEntriesMutex); + std::unique_lock lock(logEntriesMutex); //std::cout << "row " << row << " column:" << column << std::endl; if (row >= (signed int)logEntries.size() || row < 0) @@ -257,7 +257,7 @@ namespace armarx } - ScopedLock lock(logEntriesMutex); + std::unique_lock lock(logEntriesMutex); //std::cout << "row " << row << " column:" << column << std::endl; if (row >= (signed int)logEntries.size() || row < 0) @@ -567,7 +567,7 @@ namespace armarx { { - ScopedLock lock(logEntriesMutex); + std::unique_lock lock(logEntriesMutex); std::vector < LogMessage>::iterator it = logEntries.begin(); int row = 0; @@ -599,7 +599,7 @@ namespace armarx bool LogTableModel::addEntry(const LogMessage& entry, int* entriesAdded) { { - ScopedLock lock(logEntriesMutex); + std::unique_lock lock(logEntriesMutex); if (entriesAdded) { @@ -702,7 +702,7 @@ namespace armarx int size; { beginRemoveRows(QModelIndex(), 0, logEntries.size() - 1); - ScopedLock lock(logEntriesMutex); + std::unique_lock lock(logEntriesMutex); size = (int)logEntries.size(); removeRows(0, logEntries.size() - 1); logEntries.clear(); diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h index 8a547a42..0e26bc47 100644 --- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h +++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h @@ -26,11 +26,11 @@ // ArmarX #include <ArmarXCore/core/logging/Logging.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXCore/core/services/tasks/RunningTask.h> // C++ #include <vector> +#include <mutex> namespace armarx { @@ -104,7 +104,7 @@ namespace armarx std::vector < LogMessage> logEntries; std::vector <bool> rowMatchesSearch; - mutable Mutex logEntriesMutex; + mutable std::mutex logEntriesMutex; RunningTask<LogTableModel>::pointer_type searchResultTask; }; diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp index 5742c909..3c52e1de 100644 --- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp +++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp @@ -208,7 +208,7 @@ namespace armarx if (ui.cbVerbosityLevel->currentIndex() <= msg.type) { - ScopedLock lock(pendingEntriesMutex); + std::unique_lock lock(pendingEntriesMutex); pendingEntries.push_back(msg); } } @@ -758,7 +758,7 @@ namespace armarx std::vector <LogMessage> pendingEntriesTemp; { - ScopedLock lock(pendingEntriesMutex); + std::unique_lock lock(pendingEntriesMutex); pendingEntriesTemp.swap(pendingEntries); } diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h index d7d42484..c7dcf492 100644 --- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h +++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h @@ -30,6 +30,8 @@ #include <QPointer> #include <QToolBar> +#include <mutex> + class QTimer; namespace armarx @@ -130,7 +132,7 @@ namespace armarx std::vector <LogMessage> pendingEntries; - mutable Mutex pendingEntriesMutex; + mutable std::mutex pendingEntriesMutex; QTimer* pendingEntriesTimer; QToolBar* customToolbar; diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp index c3825b41..55b8acf7 100644 --- a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp +++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp @@ -142,7 +142,7 @@ namespace armarx { { // plotterController->clear(); - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); plotterController->setUpdateInterval(dialog->ui.spinBoxUpdateInterval->value()); plotterController->setShownInterval(dialog->ui.spinBoxShownInterval->value()); plotterController->setPollingInterval(dialog->ui.spinBoxPollingInterval->value()); @@ -247,7 +247,7 @@ namespace armarx void ArmarXPlotter::saveSettings(QSettings* settings) { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); settings->setValue("updateInterval", plotterController->getUpdateInterval()); settings->setValue("shownInterval", plotterController->getShownInterval()); settings->setValue("pollingInterval", plotterController->getPollingInterval()); @@ -259,7 +259,7 @@ namespace armarx void ArmarXPlotter::loadSettings(QSettings* settings) { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); plotterController->setUpdateInterval(settings->value("updateInterval", 100).toInt()); plotterController->setShownInterval(settings->value("shownInterval", 60).toInt()); plotterController->setPollingInterval(settings->value("pollingInterval", 33).toInt()); diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h index 70aebfac..9a4846c9 100644 --- a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h +++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h @@ -163,7 +163,7 @@ namespace armarx bool __plottingPaused; JSONObjectPtr json; - Mutex dataMutex; + std::mutex dataMutex; bool syncDataLogging; std::vector<std::string> csvHeader; std::ofstream logstream; diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp index 8dfa2841..3754ef74 100644 --- a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp +++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp @@ -123,7 +123,7 @@ namespace armarx ui.listWidgetPlots->clear(); plotter->detachItems(); plotter->replot(); - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); plotsMap.clear(); } @@ -145,7 +145,7 @@ namespace armarx { return; } - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); auto it = plotsMap.find(plotName); if (it == plotsMap.end()) { @@ -193,7 +193,7 @@ namespace armarx ARMARX_CHECK_EXPRESSION(!plotsData.empty()); QString qplotName = QString::fromStdString(plotName); { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); plotsMap[qplotName] = plotsData; } emit plotAdded(qplotName); diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h index 9cfacd2d..f4ada85a 100644 --- a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h +++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h @@ -13,7 +13,6 @@ #pragma GCC diagnostic pop #include <ArmarXCore/core/services/tasks/TaskUtil.h> -#include <ArmarXCore/core/system/Synchronization.h> namespace armarx { @@ -74,7 +73,7 @@ namespace armarx Ui::StaticPlotterWidget ui; QPointer<QwtPlot> plotter; std::map<QString, StringVector2fSeqDict > plotsMap; - Mutex dataMutex; + std::mutex dataMutex; QToolBar* customToolbar; // StaticPlotterInterfacePrx topicPrx ; diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp index e70fe69e..6e8e9fbb 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp @@ -32,7 +32,6 @@ #include <ArmarXCore/core/logging/Logging.h> #include <QMetaType> #include <ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <QToolTip> using namespace armarx; diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp index 6b0fc866..5b03fbbf 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp @@ -826,7 +826,7 @@ void ScenarioListController::fetchStati() { std::vector<ApplicationInstancePtr> apps; { - armarx::ScopedLock lock(applicationInstanceMutex); + std::unique_lock lock(applicationInstanceMutex); apps.swap(applicationInstances); } if (apps.empty()) @@ -964,7 +964,7 @@ void ScenarioListController::updateStati() } { - armarx::ScopedLock lock(applicationInstanceMutex); + std::unique_lock lock(applicationInstanceMutex); apps.swap(applicationInstances); } } diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h index 64aaf74a..bdc4d561 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h @@ -29,17 +29,19 @@ #include "../gui/scenariolistview.h" #include "../gui/createscenarioview.h" #include "../gui/filterabletreemodelsortfilterproxymodel.h" -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXCore/core/IceManager.h> #include <ArmarXCore/core/IceGridAdmin.h> #include <ArmarXCore/core/services/tasks/TaskUtil.h> #include <ArmarXCore/util/ScenarioManagerCommon/data_structure/Package.h> #include <ArmarXCore/util/ScenarioManagerCommon/executor/Executor.h> #include <ArmarXCore/util/ScenarioManagerCommon/data_structure/ApplicationInstance.h> +#include <ArmarXCore/core/logging/Logging.h> + #include <QObject> + #include <memory> #include <vector> -#include <ArmarXCore/core/logging/Logging.h> +#include <mutex> namespace ScenarioManager::Controller { @@ -201,7 +203,7 @@ namespace ScenarioManager::Controller Data_Structure::PackageVectorPtr packages; // used for fetching application stati, list set before every update by gui thread std::vector<ApplicationInstancePtr> applicationInstances; - armarx::Mutex applicationInstanceMutex; + std::mutex applicationInstanceMutex; armarx::SimplePeriodicTask<>::pointer_type updateTask; Exec::ExecutorPtr executor; IceGrid::AdminPrx iceAdmin; diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp index a309d5c6..8c1fc45e 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp @@ -74,7 +74,7 @@ void ApplicationDatabaseView::on_treeView_clicked(const QModelIndex& index) emit itemClicked(index); } -armarx::Mutex& ApplicationDatabaseView::getMutex() +std::mutex& ApplicationDatabaseView::getMutex() { return mutex; } diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h index 49869fca..25720df8 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h @@ -28,10 +28,11 @@ #include "treemodel.h" #include "filterabletreemodelsortfilterproxymodel.h" #include "applicationdatabasemodel.h" -#include <ArmarXCore/core/system/Synchronization.h> + #include <QWidget> -#include <QMutex> + #include <memory> +#include <mutex> namespace Ui { @@ -54,7 +55,7 @@ public: explicit ApplicationDatabaseView(QWidget* parent = 0); ~ApplicationDatabaseView() override; - armarx::Mutex& getMutex(); + std::mutex& getMutex(); signals: void testSignal(); @@ -77,6 +78,6 @@ private: Ui::ApplicationDatabaseView* ui; FilterableTreeModelSortFilterProxyModelPtr model; - armarx::Mutex mutex; + std::mutex mutex; }; diff --git a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp index 28605626..682a6e60 100644 --- a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp @@ -286,7 +286,7 @@ void StateTreeModel::generateGroupDocString(StatechartGroupPtr group, QString do const CMakePackageFinder& StateTreeModel::getPackageFinder(const QString& packageName) { - ScopedLock lock(findersMutex); + std::unique_lock lock(findersMutex); auto it = finders.find(packageName); if (it == finders.end()) { @@ -480,7 +480,7 @@ void StateTreeModel::generateBaseClasses(const StatechartGroupPtr& group) std::map<QString, CMakePackageFinder>::const_iterator it; { - ScopedLock lock(findersMutex); + std::unique_lock lock(findersMutex); it = finders.find(group->getPackageName()); diff --git a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h index 3066deb0..370b13bb 100644 --- a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h +++ b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h @@ -30,12 +30,12 @@ #include <ArmarXCore/observers/variant/VariantInfo.h> #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <QMap> #include <QProgressDialog> #include <filesystem> +#include <mutex> namespace armarx { @@ -99,7 +99,7 @@ namespace armarx Ice::CommunicatorPtr iceCommunicator; StateTreeNodePtr rootNode; VariantInfoPtr variantInfo; - Mutex findersMutex; + std::mutex findersMutex; std::map<QString, CMakePackageFinder> finders; std::set<std::string> getVariantOfStatesWithNoCpp(const StatechartGroupPtr& group); }; diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp index a86870e7..2a9e0c18 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp @@ -38,6 +38,8 @@ #include "model/stateinstance/LocalState.h" #include "model/stateinstance/StateInstance.h" +#include <cmath> + armarx::IceStateConverter::IceStateConverter(armarx::statechartmodel::StatePtr state) { topState.reset(new statechartmodel::LocalState(state, state->getStateName())); diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp index e72d92bf..b7cb52ad 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp @@ -75,7 +75,7 @@ namespace armarx { SubscriptionMap tempList; { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); tempList.swap(subscriptionQueue); } ARMARX_DEBUG << tempList.size() << " new subscriptions received"; @@ -86,7 +86,7 @@ namespace armarx StateItem* stateItem = elem.second.second; StateListenerDataMap::iterator it; { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); it = stateMap.find(iceState->globalStateIdentifier); if (it != stateMap.end() && state && it->second.states.count(state) > 0) { @@ -116,7 +116,7 @@ namespace armarx data.stateItems.insert(stateItem); } - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); stateMap[iceState->globalStateIdentifier] = data; // ARMARX_IMPORTANT << "subscribed to " << iceState->globalStateIdentifier; } @@ -130,7 +130,7 @@ namespace armarx bool StateWatcher::subscribeToState(StateIceBasePtr iceState, statechartmodel::StatePtr state) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); if (!iceState) { ARMARX_WARNING << "Ice State NULL"; @@ -148,7 +148,7 @@ namespace armarx bool StateWatcher::unsubscribeState(StateItem* state) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); for (auto& pair : stateMap) { for (auto item : pair.second.stateItems) @@ -165,7 +165,7 @@ namespace armarx bool StateWatcher::subscribeToState(StateIceBasePtr iceState, StateItem* state) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); if (!iceState) { ARMARX_WARNING << "Ice State NULL"; @@ -182,7 +182,7 @@ namespace armarx VariantPtr StateWatcher::getStateParameter(statechartmodel::StatePtr state, const std::string paramMapType) const { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); try { for (const auto& stateData : stateMap) @@ -209,7 +209,7 @@ namespace armarx StateParameterMap StateWatcher::getStateParameterMap(statechartmodel::StatePtr state, const std::string paramMapType) const { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); // try { for (const auto& stateData : stateMap) @@ -244,7 +244,7 @@ namespace armarx void StateWatcher::clear() { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); stateMap.clear(); } @@ -276,7 +276,7 @@ namespace armarx std::string stateIdentifier = event.parentName; if (event.functionName != Profiler::Profiler::GetEventName(Profiler::Profiler::eFunctionStart)) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); auto it = stateMap.find(stateIdentifier); if (it == stateMap.end()) { @@ -308,7 +308,7 @@ namespace armarx { try { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); { ARMARX_DEBUG << "Got event reported for active state changed: " << event.parentStateIdentifier; @@ -430,21 +430,21 @@ namespace armarx void StateWatcher::reportStatechartInputParameters(const ProfilerStatechartParameters& event, const Ice::Current&) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); // ARMARX_INFO << "input update for " << event.stateIdentifier << " content: " << StateUtilFunctions::getDictionaryString(event.parameterMap); stateMap[event.stateIdentifier].parameters["inputParameters"] = event.parameterMap; } void StateWatcher::reportStatechartLocalParameters(const ProfilerStatechartParameters& event, const Ice::Current&) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); // ARMARX_INFO << "local update for " << event.stateIdentifier << " content: " << StateUtilFunctions::getDictionaryString(event.parameterMap); stateMap[event.stateIdentifier].parameters["localParameters"] = event.parameterMap; } void StateWatcher::reportStatechartOutputParameters(const ProfilerStatechartParameters& event, const Ice::Current&) { - ScopedLock lock(mapMutex); + std::unique_lock lock(mapMutex); // ARMARX_INFO << "output update for " << event.stateIdentifier << " content: " << StateUtilFunctions::getDictionaryString(event.parameterMap); stateMap[event.stateIdentifier].parameters["outputParameters"] = event.parameterMap; diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h index 25cd2b9d..0b4bfe74 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h @@ -25,10 +25,11 @@ #include <ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.h> #include <ArmarXCore/observers/variant/DatafieldRef.h> #include <ArmarXCore/core/services/tasks/PeriodicTask.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXCore/interface/observers/ProfilerObserverInterface.h> #include <ArmarXGui/gui-plugins/StatechartViewerPlugin/view/StateItem.h> +#include <mutex> + namespace armarx { @@ -70,7 +71,7 @@ namespace armarx void subscriptionFunction(); StateListenerDataMap stateMap; - mutable armarx::Mutex mapMutex; + mutable std::mutex mapMutex; ConditionHandlerInterfacePrx conditionHandler; ProfilerObserverInterfacePrx profilerObserver; using SubscriptionMap = std::vector<std::pair<StateIceBasePtr, std::pair<statechartmodel::StatePtr, StateItem*>> >; diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp index bbcba37c..09a94e35 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp @@ -81,7 +81,7 @@ namespace armarx StatechartViewerController::~StatechartViewerController() { shutdown = true; - ScopedRecursiveLock lock(mutex);// wait for network functions to finish + std::unique_lock lock(mutex);// wait for network functions to finish } @@ -156,7 +156,7 @@ namespace armarx void StatechartViewerController::updateStatechartView(StateIceBasePtr stateptr, IceStateConverterPtr converter) { - ScopedRecursiveLock lock(mutex); + std::unique_lock lock(mutex); auto start = IceUtil::Time::now(); converter->convert(stateptr); ARMARX_DEBUG << deactivateSpam(3) << "converting instance took : " << (IceUtil::Time::now() - start).toMilliSecondsDouble() << " ms"; @@ -170,7 +170,7 @@ namespace armarx } QMap<QPointer<StatechartView>, RemoteStateData> tempConverters; { - ScopedRecursiveLock lock(mutex); + std::unique_lock lock(mutex); tempConverters = converters; } for (RemoteStateData& stateData : tempConverters) @@ -437,7 +437,7 @@ namespace armarx if (result == triggerTransition) { - ScopedRecursiveLock lock(mutex); + std::unique_lock lock(mutex); for (RemoteStateData& data : converters) { diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h index 8d307498..ac03ff99 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h @@ -34,6 +34,8 @@ #include <ArmarXGui/gui-plugins/StatechartViewerPlugin/controller/ActiveStateFollower.h> +#include <mutex> + namespace Ui { class StatechartViewer; @@ -117,7 +119,7 @@ namespace armarx QPointer<QToolBar> customToolbar; QAction* autoFollowAction; QAction* centerActiveStateAction; - RecursiveMutex mutex; + std::recursive_mutex mutex; bool shutdown = false; // ArmarXWidgetController interface public: diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h index 2031f34e..40100e75 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h @@ -23,7 +23,6 @@ */ #pragma once -#include <ArmarXCore/core/system/Synchronization.h> #include "graphviz/gvc.h" #ifdef WITH_CGRAPH # include <graphviz/cgraph.h> @@ -60,7 +59,7 @@ namespace armarx /** * @brief mutex Mutex to lock graph */ - RecursiveMutex mutex; + std::recursive_mutex mutex; }; using LockableGraphPtr = std::shared_ptr<LockableGraph>; diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp index 4c622068..2b8b5b89 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp @@ -47,7 +47,7 @@ armarx::LayoutWorker::LayoutWorker(size_t workerId, QString name, armarx::GvcPtr name(name) { m_graph = std::make_shared<LockableGraph>(); - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); m_graph->graph = agopen(name.toLatin1().data(), Agdirected, NULL); ARMARX_INFO_S << m_graph->graph << " Creating Graph with name " << name.toLatin1().data(); @@ -97,7 +97,7 @@ armarx::LayoutWorker::LayoutWorker(size_t workerId, QString name, armarx::GvcPtr armarx::LayoutWorker::~LayoutWorker() { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); agclose(m_graph->graph); } @@ -137,7 +137,7 @@ void armarx::LayoutWorker::isConnected(size_t workerId) void armarx::LayoutWorker::layoutWithAlgo(std::string algorithm) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); // ARMARX_INFO_S << "Layouting with graph ptr " << m_graph->graph; // int nodeCard = agnnodes(m_graph->graph); // ARMARX_INFO_S << "State " /*<< m_graph->graph->name*/ << " with " << nodeCard << " substates is to be layouted"; diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp index 635a8d26..7e07807e 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp @@ -311,7 +311,7 @@ void armarx::StateModelLayoutMediator::stateDeleted() bool armarx::StateModelLayoutMediator::updateInitialTransition(armarx::statechartmodel::TransitionCPtr transition, armarx::statechartmodel::SignalType signalType) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); if (transition->sourceState) { return false; @@ -429,7 +429,7 @@ QPointF armarx::StateModelLayoutMediator::convertPositionToGraphViz(QPointF stat void armarx::StateModelLayoutMediator::addNode(armarx::statechartmodel::StateInstancePtr substate) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); //Sometimes the eAdded signal for a node reaches the mediator after an eChanged signal. Test whether //there already is a node for the given substate and only add one if there isn't one already. @@ -461,7 +461,7 @@ void armarx::StateModelLayoutMediator::addNode(armarx::statechartmodel::StateIns void armarx::StateModelLayoutMediator::removeNode(armarx::statechartmodel::StateInstancePtr substate) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); NodePtr node = getNode(substate); if (!substate || !substate->getStateClass()) @@ -480,7 +480,7 @@ void armarx::StateModelLayoutMediator::removeNode(armarx::statechartmodel::State void armarx::StateModelLayoutMediator::setNodeAttribute(armarx::statechartmodel::StateInstancePtr substate, const std::string& attributeName, const std::string& attributeValue) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); NodePtr node = getNode(substate); @@ -495,7 +495,7 @@ void armarx::StateModelLayoutMediator::setNodeAttribute(armarx::statechartmodel: std::string armarx::StateModelLayoutMediator::getNodeAttribute(armarx::statechartmodel::StateInstancePtr substate, const std::string& attributeName) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); NodePtr node = getNode(substate); @@ -509,7 +509,7 @@ std::string armarx::StateModelLayoutMediator::getNodeAttribute(armarx::statechar } bool armarx::StateModelLayoutMediator::hasNodeAttribute(armarx::statechartmodel::StateInstancePtr substate, const std::string& attributeName) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); NodePtr node = getNode(substate); @@ -573,7 +573,7 @@ armarx::NodePtr armarx::StateModelLayoutMediator::getNode(armarx::statechartmode void armarx::StateModelLayoutMediator::addEdge(armarx::statechartmodel::TransitionCPtr transition) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); if (!transitionRepresentable(transition)) { @@ -601,7 +601,7 @@ void armarx::StateModelLayoutMediator::addEdge(armarx::statechartmodel::Transiti void armarx::StateModelLayoutMediator::removeEdge(armarx::statechartmodel::TransitionCPtr transition) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); EdgePtr edge = getEdge(transition); @@ -617,7 +617,7 @@ void armarx::StateModelLayoutMediator::removeEdge(armarx::statechartmodel::Trans void armarx::StateModelLayoutMediator::setEdgeAttribute(armarx::statechartmodel::TransitionCPtr transition, std::string attributeName, std::string attributeValue) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); EdgePtr edge = getEdge(transition); @@ -631,7 +631,7 @@ void armarx::StateModelLayoutMediator::setEdgeAttribute(armarx::statechartmodel: std::string armarx::StateModelLayoutMediator::getEdgeAttribute(armarx::statechartmodel::TransitionCPtr transition, std::string attributeName) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); EdgePtr edge = getEdge(transition); @@ -646,7 +646,7 @@ std::string armarx::StateModelLayoutMediator::getEdgeAttribute(armarx::statechar bool armarx::StateModelLayoutMediator::hasEdgeAttribute(armarx::statechartmodel::TransitionCPtr transition, std::string attributeName) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); EdgePtr edge = getEdge(transition); @@ -812,7 +812,7 @@ void armarx::StateModelLayoutMediator::updateNodeName(armarx::statechartmodel::S if (newName != oldName) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); NodePtr node = getNode(oldName); setGraphAttribute(node, "label", newName); @@ -838,7 +838,7 @@ void armarx::StateModelLayoutMediator::updateEdgeLabel(armarx::statechartmodel:: void armarx::StateModelLayoutMediator::updateEdgeTargetAndSource(armarx::statechartmodel::TransitionCPtr transition) { - ScopedRecursiveLock lock(m_graph->mutex); + std::unique_lock lock(m_graph->mutex); if (transitionRepresentable(transition)) { diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp index 90da915f..d718f49c 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp @@ -25,10 +25,11 @@ #include "stateinstance/RemoteState.h" #include "stateinstance/LocalState.h" #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h> +#include "stateinstance/DynamicRemoteState.h" #include <IceUtil/UUID.h> -#include "stateinstance/DynamicRemoteState.h" +#include <cmath> namespace armarx::statechartmodel { diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp index 78a04bc8..1e1702cb 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp @@ -27,6 +27,8 @@ using namespace statechartmodel; #include "../State.h" +#include <cmath> + const QSizeF StateInstance::StateDefaultSize = QSizeF(800, 600); StateInstance::StateInstance(const QString& instanceName, StatePtr parentState) : diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp index 2a9cf3aa..e8fc6d7a 100644 --- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp +++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp @@ -39,9 +39,11 @@ #include <QGraphicsView> #include <QPropertyAnimation> #include <QStyleOptionGraphicsItem> -#include <memory> #include "SplinePath.h" +#include <memory> +#include <cmath> + #define INITIAL_CIRCLE_RADIUS 10 diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp index a23e661d..1c05ad96 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp @@ -137,7 +137,7 @@ namespace armarx } - Mutex& ArmarXManagerItem::getMutex() + std::mutex& ArmarXManagerItem::getMutex() { return mutex; } diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h index 906ba6f3..1e251805 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h @@ -30,12 +30,12 @@ #include <ArmarXCore/core/ArmarXManager.h> #include <ArmarXCore/core/ManagedIceObject.h> #include <ArmarXCore/core/ManagedIceObjectRegistryInterface.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <QObject> -#include <QMutex> #include <QStandardItem> +#include <mutex> + namespace armarx { class ArmarXManagerItem : public QStandardItem @@ -83,11 +83,11 @@ namespace armarx * * @return Access mutex */ - Mutex& getMutex(); + std::mutex& getMutex(); private: ManagerData data; - Mutex mutex; + std::mutex mutex; }; } diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp index 96f91b04..d067affc 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp @@ -617,7 +617,7 @@ namespace armarx return QVariant(); } - Mutex& ArmarXManagerModel::getMutex() + std::mutex& ArmarXManagerModel::getMutex() { return mutex; } @@ -630,7 +630,7 @@ namespace armarx if (managerItem) { - // ScopedLock lock(getMutex()); + // std::unique_lock lock(getMutex()); managerItem->setName(item->text()); } @@ -659,7 +659,7 @@ namespace armarx void ArmarXManagerModel::populate(const QStringList& managerList) { CHECK_QT_THREAD(this); - // ScopedLock lock(getMutex()); + // std::unique_lock lock(getMutex()); this->clear(); @@ -675,7 +675,7 @@ namespace armarx CHECK_QT_THREAD(this); ArmarXManagerModel* modelCopy = new ArmarXManagerModel(); - ScopedLock lock(getMutex()); + std::unique_lock lock(getMutex()); for (int i = 0; i < rowCount(); i++) { @@ -691,8 +691,8 @@ namespace armarx void ArmarXManagerModel::copyFrom(ArmarXManagerModel* source) { CHECK_QT_THREAD(this); - // ScopedLock lock(getMutex()); - // ScopedLock lockSource(source->getMutex()); + // std::unique_lock lock(getMutex()); + // std::unique_lock lockSource(source->getMutex()); this->clear(); diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h index d10caf77..b4b54473 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h @@ -37,7 +37,8 @@ #include <ArmarXCore/core/ArmarXManager.h> #include <ArmarXCore/core/ManagedIceObject.h> #include <ArmarXCore/core/ManagedIceObjectRegistryInterface.h> -#include <ArmarXCore/core/system/Synchronization.h> + +#include <mutex> namespace armarx { @@ -153,7 +154,7 @@ namespace armarx /** * Returns the access mutex */ - Mutex& getMutex(); + std::mutex& getMutex(); void setIceManager(IceManagerPtr iceManager); IceManagerPtr getIceManager() const; @@ -214,7 +215,7 @@ namespace armarx /** * Modification access mutex */ - Mutex mutex; + std::mutex mutex; IceManagerPtr iceManager; std::map<std::string, DependencyMap> dependenciesMap; diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp index 4ef5c161..f1b7ad48 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp @@ -121,7 +121,7 @@ namespace armarx { QString lastSelectionText = ui->gridNodeSelector->currentText(); { - ScopedLock guard(gridNodeListMutex); + std::unique_lock guard(gridNodeListMutex); gridNodeList = nodeSeq; QStringList nodeNames; @@ -143,7 +143,7 @@ namespace armarx void IceGridViewer::gridNodeListAdd(const IceGrid::NodeDynamicInfo& node) { - ScopedLock guard(gridNodeListMutex); + std::unique_lock guard(gridNodeListMutex); QStringList currentEntries = selectorModel->stringList(); currentEntries.append(QString::fromStdString(node.info.name)); gridNodeList.push_back(node); @@ -155,7 +155,7 @@ namespace armarx { QString lastSelectionText = ui->gridNodeSelector->currentText(); { - ScopedLock guard(gridNodeListMutex); + std::unique_lock guard(gridNodeListMutex); QStringList currentEntries = selectorModel->stringList(); currentEntries.removeOne(node); @@ -180,7 +180,7 @@ namespace armarx void IceGridViewer::updateServerInfo(const std::string& nodeName, const IceGrid::ServerDynamicInfo& serverUpdateInfo) { { - ScopedLock guard(gridNodeListMutex); + std::unique_lock guard(gridNodeListMutex); IceGrid::NodeDynamicInfoSeq::iterator nodeEntry = std::find_if(gridNodeList.begin(), gridNodeList.end(), [nodeName](IceGrid::NodeDynamicInfo nodeInfo) { @@ -222,7 +222,7 @@ namespace armarx void IceGridViewer::updateAdapterInfo(const std::string& nodeName, const IceGrid::AdapterDynamicInfo& adapterUpdateInfo) { { - ScopedLock guard(gridNodeListMutex); + std::unique_lock guard(gridNodeListMutex); IceGrid::NodeDynamicInfoSeq::iterator nodeEntry = std::find_if(gridNodeList.begin(), gridNodeList.end(), [nodeName](IceGrid::NodeDynamicInfo nodeInfo) { @@ -274,7 +274,7 @@ namespace armarx return; } - ScopedLock guard(gridNodeListMutex); + std::unique_lock guard(gridNodeListMutex); nodeInfoModel->setData(gridNodeList[index].info); serverInfoModel->setData(gridNodeList[index].servers); adapterInfoModel->setData(gridNodeList[index].adapters); diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h index d5125bec..13eb8ddd 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h @@ -23,13 +23,14 @@ #pragma once #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <QWidget> #include <QStringListModel> #include <IceGrid/Admin.h> +#include <mutex> + namespace Ui { class IceGridViewer; @@ -107,7 +108,7 @@ namespace armarx void serverInfoChanged(IceGrid::ServerDynamicInfo serverInfo); private: - mutable Mutex gridNodeListMutex; + mutable std::mutex gridNodeListMutex; Ui::IceGridViewer* ui; const std::string ADAPTER_NAME; diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h index 50c93a9a..776dc111 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h @@ -24,7 +24,8 @@ #include <QAbstractTableModel> #include <IceGrid/Admin.h> -#include <ArmarXCore/core/system/Synchronization.h> + +#include <mutex> class AdapterInfoModel : public QAbstractTableModel @@ -68,7 +69,7 @@ public: if (role == Qt::DisplayRole) { - armarx::ScopedLock guard(adapterInfoMutex); + std::unique_lock guard(adapterInfoMutex); switch (index.column()) { @@ -126,7 +127,7 @@ public: bool setData(IceGrid::AdapterDynamicInfoSeq newInfo) { - armarx::ScopedLock guard(adapterInfoMutex); + std::unique_lock guard(adapterInfoMutex); beginResetModel(); adapterInfo = newInfo; endResetModel(); @@ -136,6 +137,6 @@ public: protected: IceGrid::AdapterDynamicInfoSeq adapterInfo; - mutable armarx::Mutex adapterInfoMutex; + mutable std::mutex adapterInfoMutex; }; diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp index 60af383b..dbc871f0 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp @@ -54,7 +54,7 @@ namespace armarx { const unsigned int& row = index.row(); const unsigned int& column = index.column(); - ScopedLock lock(gridNodeListsMutex); + std::unique_lock lock(gridNodeListsMutex); if (row >= gridNodeItemsList.size()) { @@ -117,7 +117,7 @@ namespace armarx void IceGridModel::setData(const std::vector<std::string>& gridNodeItemsList) { beginResetModel(); - ScopedLock lock(gridNodeListsMutex); + std::unique_lock lock(gridNodeListsMutex); this->gridNodeItemsList = gridNodeItemsList; endResetModel(); emit dataChanged(index(0, 0), index(rowCount(), columnCount())); diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h index 38265765..355ca545 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h @@ -25,7 +25,7 @@ #include <QAbstractItemModel> #include <QStyledItemDelegate> -#include <ArmarXCore/core/system/Synchronization.h> +#include <mutex> namespace armarx { @@ -53,7 +53,7 @@ namespace armarx void run(); std::vector<std::string> gridNodeItemsList; - mutable Mutex gridNodeListsMutex; + mutable std::mutex gridNodeListsMutex; }; } diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h index e49ab663..7e9d00ed 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h @@ -24,7 +24,8 @@ #include <QAbstractTableModel> #include <IceGrid/Admin.h> -#include <ArmarXCore/core/system/Synchronization.h> + +#include <mutex> class NodeInfoModel : public QAbstractTableModel @@ -64,7 +65,7 @@ public: if (role == Qt::DisplayRole) { - armarx::ScopedLock guard(nodeInfoMutex); + std::unique_lock guard(nodeInfoMutex); switch (index.column()) { @@ -167,7 +168,7 @@ public: bool setData(IceGrid::NodeInfo newInfo) { - armarx::ScopedLock guard(nodeInfoMutex); + std::unique_lock guard(nodeInfoMutex); beginResetModel(); nodeInfo = newInfo; endResetModel(); @@ -177,6 +178,6 @@ public: protected: IceGrid::NodeInfo nodeInfo; - mutable armarx::Mutex nodeInfoMutex; + mutable std::mutex nodeInfoMutex; }; diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h index 3adcfe7d..e03d1b09 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h @@ -24,10 +24,11 @@ #include <QAbstractTableModel> #include <IceGrid/Admin.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <QBrush> +#include <mutex> + class ServerInfoModel : public QAbstractTableModel @@ -79,7 +80,7 @@ public: if (role == Qt::DisplayRole) { - armarx::ScopedLock guard(serverInfoMutex); + std::unique_lock guard(serverInfoMutex); switch (index.column()) { @@ -209,7 +210,7 @@ public: bool setData(IceGrid::ServerDynamicInfoSeq newInfo) { - armarx::ScopedLock guard(serverInfoMutex); + std::unique_lock guard(serverInfoMutex); beginResetModel(); serverInfo = newInfo; endResetModel(); @@ -222,6 +223,6 @@ signals: protected: IceGrid::ServerDynamicInfoSeq serverInfo; - mutable armarx::Mutex serverInfoMutex; + mutable std::mutex serverInfoMutex; }; diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp index d36765f2..736f9979 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp @@ -232,7 +232,7 @@ namespace armarx } else { - ScopedLock lock(managerPrxMapMutex); + std::unique_lock lock(managerPrxMapMutex); currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap(); } } @@ -259,7 +259,7 @@ namespace armarx { CHECK_QT_THREAD(getWidget()); - ScopedLock lock(monitoredManagerModel->getMutex()); + std::unique_lock lock(monitoredManagerModel->getMutex()); monitoredManagerModel->updateManagerDetails(managerData); filterModel->invalidate(); @@ -339,13 +339,13 @@ namespace armarx void SystemStateMonitorWidget::updateManagerObjectsState() { - // ScopedLock lock(monitoredManagerModel->getMutex()); + // std::unique_lock lock(monitoredManagerModel->getMutex()); // StateUpdateMap stateMap; ArmarXManagerItem::ManagerDataMap managerDataMap; { decltype(currentManagerPrxMap) proxies; { - ScopedLock lock(managerPrxMapMutex); + std::unique_lock lock(managerPrxMapMutex); proxies = currentManagerPrxMap; } IceUtil::Time start = IceUtil::Time::now(); @@ -376,7 +376,7 @@ namespace armarx this->monitoredManagerModel->copyFrom( managerRepositoryDialog->getMonitoredManagersModel()); ui.monitoredManagersTree->expandToDepth(1); - ScopedLock lock(managerPrxMapMutex); + std::unique_lock lock(managerPrxMapMutex); currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap(); } @@ -460,7 +460,7 @@ namespace armarx // QMetaObject::invokeMethod(this, "addArmarXManagers", Q_ARG(QStringList, managers)); addArmarXManagers(managers); QMetaObject::invokeMethod(ui.monitoredManagersTree, "expandToDepth", Q_ARG(int, 0)); - ScopedLock lock(managerPrxMapMutex); + std::unique_lock lock(managerPrxMapMutex); currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap(managers); } diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h index 78b2968d..386423e3 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h @@ -40,6 +40,8 @@ #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h> #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h> +#include <mutex> + namespace Ui { class SystemStateMonitorWidget; @@ -175,7 +177,7 @@ namespace armarx */ ArmarXManagerModel* managerRepositoryModel; - Mutex managerPrxMapMutex; + std::mutex managerPrxMapMutex; ManagerPrxMap currentManagerPrxMap; QTimer filterExpansionTimer; /** diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp index 48dd0305..81449fa2 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp @@ -50,7 +50,7 @@ namespace armarx { const unsigned int& row = index.row(); const unsigned int& column = index.column(); - ScopedLock lock(taskListsMutex); + std::unique_lock lock(taskListsMutex); if (row >= runningTaskList.size()) { @@ -161,7 +161,7 @@ namespace armarx { beginResetModel(); - ScopedLock lock(taskListsMutex); + std::unique_lock lock(taskListsMutex); this->runningTaskList = runningTaskList; endResetModel(); emit dataChanged(index(0, 0), index(rowCount(), columnCount())); diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h index 86347a18..f734b4b6 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h @@ -25,7 +25,8 @@ #include <QAbstractItemModel> #include <ArmarXCore/core/services/tasks/RunningTask.h> -#include <ArmarXCore/core/system/Synchronization.h> + +#include <mutex> namespace armarx { @@ -54,7 +55,7 @@ namespace armarx RunningTaskList runningTaskList; - mutable Mutex taskListsMutex; + mutable std::mutex taskListsMutex; }; } diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp index 68f4e389..b1ac02e1 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp @@ -183,7 +183,7 @@ namespace armarx return; } - ScopedRecursiveLock lock(proxyMutex); + std::unique_lock lock(proxyMutex); threadManagerProxy = getProxy<ThreadListInterfacePrx>(selectedString.toStdString()); ARMARX_VERBOSE << "new proxy for ThreadViewerModel set: " << selectedString; } @@ -196,7 +196,7 @@ namespace armarx void ThreadViewer::runThreadManagerUpdate() { - ScopedRecursiveLock lock(proxyMutex); + std::unique_lock lock(proxyMutex); if (!threadManagerProxy) { diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h index 92539672..5412e5db 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h @@ -26,10 +26,11 @@ #include <ArmarXCore/core/services/tasks/ThreadList.h> #include <ArmarXCore/core/services/tasks/PeriodicTask.h> #include <ArmarXCore/core/services/tasks/RunningTask.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <QWidget> +#include <mutex> + namespace Ui { class ThreadViewer; @@ -110,7 +111,7 @@ namespace armarx private: void runThreadManagerUpdate(); - mutable RecursiveMutex proxyMutex; + mutable std::recursive_mutex proxyMutex; ThreadListInterfacePrx threadManagerProxy; PeriodicTask<ThreadViewer>::pointer_type periodicTask; RunningTask<ThreadViewer>::pointer_type managerUpdateTask; diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp index b62e540f..6c4a8f99 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp @@ -50,7 +50,7 @@ namespace armarx { const unsigned int& row = index.row(); const unsigned int& column = index.column(); - ScopedLock lock(taskListsMutex); + std::unique_lock lock(taskListsMutex); if (row >= periodicTaskList.size()) { @@ -176,7 +176,7 @@ namespace armarx { beginResetModel(); - ScopedLock lock(taskListsMutex); + std::unique_lock lock(taskListsMutex); this->periodicTaskList = periodicTaskList; endResetModel(); emit dataChanged(index(0, 0), index(rowCount(), columnCount())); diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h index 1882a428..db557773 100644 --- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h +++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h @@ -25,7 +25,8 @@ #include <QAbstractItemModel> #include <ArmarXCore/core/services/tasks/PeriodicTask.h> -#include <ArmarXCore/core/system/Synchronization.h> + +#include <mutex> namespace armarx { @@ -53,7 +54,7 @@ namespace armarx void run(); PeriodicTaskList periodicTaskList; - mutable Mutex taskListsMutex; + mutable std::mutex taskListsMutex; }; } diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h index 8ffc9ab5..a7f0c1ab 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h @@ -29,7 +29,7 @@ #include <ArmarXCore/core/exceptions/Exception.h> #include <ArmarXCore/core/util/TemplateMetaProgramming.h> -#include <boost/type_traits/is_base_of.hpp> +#include <type_traits> namespace armarx { @@ -57,7 +57,8 @@ namespace armarx template < typename ArmarXWidgetType> typename std::enable_if < !HasGetWidgetName<ArmarXWidgetType>::value >::type addWidget() { - BOOST_STATIC_ASSERT_MSG((boost::is_base_of<ArmarXWidgetController, ArmarXWidgetType>::value), "The template parameter of addWidget, must be a class that derives from ArmarXWidget"); + static_assert(std::is_base_of_v<ArmarXWidgetController, ArmarXWidgetType>, + "The template parameter of addWidget, must be a class that derives from ArmarXWidget"); try { @@ -96,7 +97,8 @@ namespace armarx template <typename ArmarXWidgetType> typename std::enable_if<HasGetWidgetName<ArmarXWidgetType>::value>::type addWidget() { - BOOST_STATIC_ASSERT_MSG((boost::is_base_of<ArmarXWidgetController, ArmarXWidgetType>::value), "The template parameter of addWidget, must be a class that derives from ArmarXWidget"); + static_assert(std::is_base_of_v<ArmarXWidgetController, ArmarXWidgetType>, + "The template parameter of addWidget, must be a class that derives from ArmarXWidget"); try { @@ -107,7 +109,7 @@ namespace armarx + "' already exists in a loaded plugin!").toStdString()); } - if (boost::is_base_of<ArmarXComponentWidgetController, ArmarXWidgetType>::value) + if (std::is_base_of_v<ArmarXComponentWidgetController, ArmarXWidgetType>) { ArmarXWidgetInfoPtr widgetInfo(new ArmarXWidgetInfo(ArmarXComponentWidgetController::createInstance<ArmarXWidgetType>, ArmarXWidgetType::GetWidgetIcon(), @@ -127,30 +129,6 @@ namespace armarx ARMARX_ERROR_S << "Could not add widget!\n" << GetHandledExceptionString(); } } - // template<typename ArmarXWidgetType> - // typename boost::enable_if<boost::is_base_of<ArmarXComponentWidgetController, ArmarXWidgetType>, void >::type - // addWidget(const QString & widgetName) - // { - // addWidget<ArmarXWidgetType,ArmarXComponentWidgetController>(widgetName); - // } - - // template<typename ArmarXWidgetType> - // typename boost::disable_if<boost::is_base_of<ArmarXComponentWidgetController, ArmarXWidgetType>, void >::type - // addWidget(const QString & widgetName) - // { - // addWidget<ArmarXWidgetType,ArmarXWidgetController>(widgetName); - // } - - // template<typename ArmarXWidgetType, class BaseType> - // void - // addWidget(const QString & widgetName) - // { - // if(__availableWidgets.find(widgetName) != __availableWidgets.end()) - // throw LocalException(QString("A widget with the name '" - // + widgetName - // +"' already exists in a loaded plugin!").toStdString()); - // __availableWidgets[widgetName] = BaseType::template createInstance< ArmarXWidgetType >; - // } WidgetCreatorMap getProvidedWidgets() override { diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp index 8d3d6ed5..1c36823b 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp @@ -115,15 +115,13 @@ namespace armarx } - void ArmarXWidgetController::setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D) + void ArmarXWidgetController::setMutex3D(RecursiveMutexPtr const& mutex3D) { - //ARMARX_INFO << "Widget controller " << getInstanceName() << ": set mutex " << mutex3D.get(); this->mutex3D = mutex3D; } void ArmarXWidgetController::configAccepted() { - // ARMARX_VERBOSE << "config was accepted"; configured(); emit configAccepted(this); } diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h index 83fe9704..3c0dd806 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h @@ -33,11 +33,11 @@ // Armarx includes #include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/Component.h> -#include <ostream> #include "QtUtil.h" -#include <boost/shared_ptr.hpp> -#include <boost/thread/recursive_mutex.hpp> +#include <ostream> +#include <memory> +#include <mutex> class SoNode; @@ -266,11 +266,17 @@ namespace armarx */ QPointer<TipDialog> getTipDialog() const; void setTipDialog(QPointer<TipDialog> tipDialog); + + // This is all total madness. Why do we put mutexes and locks into shared pointers? + using RecursiveMutex = std::recursive_mutex; + using RecursiveMutexPtr = std::shared_ptr<RecursiveMutex>; + using RecursiveMutexLock = std::unique_lock<RecursiveMutex>; + using RecursiveMutexLockPtr = std::shared_ptr<RecursiveMutexLock>; /*! * \brief This mutex is used to protect 3d scene updates. Usually called by the ArmarXGui main window on creation of this controller. * \param mutex3D */ - virtual void setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D); + virtual void setMutex3D(RecursiveMutexPtr const& mutex3D); template <typename Class> static ArmarXWidgetControllerPtr createInstance() @@ -308,7 +314,7 @@ namespace armarx QMainWindow* __appMainWindow; QPointer<TipDialog> tipDialog; protected: - boost::shared_ptr<boost::recursive_mutex> mutex3D; + std::shared_ptr<std::recursive_mutex> mutex3D; }; } diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp index 776681f8..40b0d0d1 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp @@ -63,7 +63,7 @@ namespace armarx bool found = false; QFileInfo info(pluginPath) ; { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); for (auto& elem : pluginData) { // ARMARX_INFO_S << info.lastModified().toString() << elem.pluginPath; @@ -99,14 +99,14 @@ namespace armarx bool PluginCache::cacheWidget(QString widgetName, ArmarXWidgetInfoPtr widgetCreator) { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); pluginData[""].widgets[widgetName] = widgetCreator; return true; } ArmarXWidgetInfoPtr PluginCache::getWidgetCreator(const QString& widgetName) { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); for (const PluginData& data : pluginData) { WidgetCreatorMap::const_iterator it = data.widgets.find(widgetName); @@ -132,7 +132,7 @@ namespace armarx QStringList PluginCache::getAvailableWidgetNames() const { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); QStringList result; for (const PluginData& data : pluginData) { @@ -147,7 +147,7 @@ namespace armarx WidgetCreatorMap PluginCache::getAvailableWidgets() const { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); WidgetCreatorMap result; for (const PluginData& data : pluginData) { @@ -212,7 +212,7 @@ namespace armarx for (QString widgetName : widgetNames) { { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); QString pluginPath; for (PluginData& data : pluginData) { @@ -250,7 +250,7 @@ namespace armarx void PluginCache::clearCacheFile() { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); ARMARX_INFO << "Clearing plugin cache"; s.clear(); } @@ -269,7 +269,7 @@ namespace armarx void PluginCache::removeWidgetFromCache(QString pluginPath, QString widgetName) { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); QMap<QString, QVariant> widgetMap = s.value("widgets").toMap(); widgetMap.remove(pluginPath + ":" + widgetName); s.setValue("widgets", widgetMap); @@ -287,7 +287,7 @@ namespace armarx void PluginCache::removePluginFromCache(QString pluginPath) { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); ARMARX_INFO << "Removing plugin " << pluginPath << " from cache"; QMap<QString, QVariant> widgetMap = s.value("widgets").toMap(); QMap<QString, QVariant> newWidgetMap; @@ -313,7 +313,7 @@ namespace armarx void PluginCache::updateLastModifiedTimestamp(const QString& pluginPath) { QDateTime time = QFileInfo(pluginPath).lastModified(); - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); QMap<QString, QVariant> widgetMap = s.value("widgets").toMap(); ARMARX_DEBUG_S << "Updating last modified timestamp of plugin " << pluginPath << " to " << time.toString(); auto& pluginDataElement = pluginData[pluginPath]; @@ -337,7 +337,7 @@ namespace armarx auto widgets = loadPlugin(loader); copyResourcesToCache(); ARMARX_INFO_S << "Writing plugin " << pluginPath << " to cache"; - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); QMap<QString, QVariant> widgetMap = s.value("widgets").toMap(); QDateTime time = QFileInfo(pluginPath).lastModified(); for (auto& elem : widgets) @@ -363,7 +363,7 @@ namespace armarx QByteArray hash; QMap<QString, QVariant> map; { - ScopedRecursiveLock lock(cacheMutex); + std::unique_lock lock(cacheMutex); map = s.value("widgets").toMap(); } for (auto key : map.keys()) diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h index 78e8f0bb..e1440027 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h @@ -1,6 +1,5 @@ #pragma once -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h> #include <QDateTime> @@ -9,6 +8,7 @@ #include <memory> #include <future> +#include <mutex> class QProgressDialog; @@ -63,7 +63,7 @@ namespace armarx QMap<QString, PluginData> pluginData; ArmarXManagerPtr manager; QSettings s; - mutable RecursiveMutex cacheMutex; + mutable std::recursive_mutex cacheMutex; std::future<void> preloadFuture; bool shutdown = false; diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp index 809b1094..791c68ec 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp @@ -35,27 +35,25 @@ namespace armarx SoQtFullViewer::BuildFlag flag, SoQtViewer::Type type) : SoQtExaminerViewer(parent, name, embed, flag, type) + , mutex(std::make_shared<RecursiveMutex>()) { - mutex.reset(new boost::recursive_mutex); - //ARMARX_IMPORTANT_S << "** Coin viewer init mutex:" << mutex.get(); } CoinViewer::~CoinViewer() = default; - void CoinViewer::setMutex(boost::shared_ptr<boost::recursive_mutex> m) + void CoinViewer::setMutex(RecursiveMutexPtr const& m) { - //ARMARX_IMPORTANT_S << "set coinviewer mutex3d:" << m.get(); mutex = m; } - ScopedRecursiveLockPtr CoinViewer::getScopedLock() + auto CoinViewer::getScopedLock() -> RecursiveMutexLockPtr { - ScopedRecursiveLockPtr l; + RecursiveMutexLockPtr l; if (mutex) { - l.reset(new ScopedRecursiveLock(*mutex)); + l.reset(new RecursiveMutexLock(*mutex)); } return l; @@ -65,7 +63,7 @@ namespace armarx { // require lock clock_t start = clock(); - ScopedRecursiveLockPtr l = getScopedLock(); + auto l = getScopedLock(); clock_t end = clock(); long timeMS = (long)(((float)(end - start) / (float)CLOCKS_PER_SEC) * 1000.0); diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h index 6e42d3db..2ab2ddc2 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h @@ -24,8 +24,9 @@ #include <Inventor/Qt/viewers/SoQtExaminerViewer.h> -#include <boost/thread/recursive_mutex.hpp> -#include <ArmarXCore/core/system/Synchronization.h> + +#include <memory> +#include <mutex> // project namespace armarx @@ -46,16 +47,22 @@ namespace armarx SoQtViewer::Type type = BROWSER); ~CoinViewer() override; + // This is all total madness. Why do we put mutexes and locks into shared pointers? + using RecursiveMutex = std::recursive_mutex; + using RecursiveMutexPtr = std::shared_ptr<RecursiveMutex>; + using RecursiveMutexLock = std::unique_lock<RecursiveMutex>; + using RecursiveMutexLockPtr = std::shared_ptr<RecursiveMutexLock>; + /*! * If set, the drawing is protected by this mutex. This overwrites the default mutex. */ - void setMutex(boost::shared_ptr<boost::recursive_mutex> m); + void setMutex(RecursiveMutexPtr const& m); /*! * \return This lock allows to safely access the viewer's scene graph. */ - ScopedRecursiveLockPtr getScopedLock(); + RecursiveMutexLockPtr getScopedLock(); protected: @@ -64,9 +71,9 @@ namespace armarx */ void actualRedraw(void) override; - boost::shared_ptr<boost::recursive_mutex> mutex; + RecursiveMutexPtr mutex; }; - using CoinViewerPtr = boost::shared_ptr<CoinViewer>; + using CoinViewerPtr = std::shared_ptr<CoinViewer>; } diff --git a/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp b/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp index 55f76559..0c21ca67 100644 --- a/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp +++ b/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp @@ -125,7 +125,7 @@ namespace armarx { return; } - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); IceUtil::Time curTime = TimeUtil::GetTime(); // erase old markers @@ -347,7 +347,7 @@ namespace armarx return std::map<std::string, VariantPtr>(); } std::map< std::string, DataFieldIdentifierBaseList > channelsSplittedByObserver; - foreach (QString channel, channels) + for (QString const& channel : channels) { DataFieldIdentifierPtr identifier = new DataFieldIdentifier(channel.toStdString()); channelsSplittedByObserver[identifier->getObserverName()].push_back(identifier); @@ -355,7 +355,7 @@ namespace armarx } std::map<std::string, VariantPtr> newData; { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); // first clear to old entries auto now = TimeUtil::GetTime(); @@ -427,7 +427,7 @@ namespace armarx // QDateTime time(QDateTime::currentDateTime()); TimedVariantBaseList variants = proxyMap[observerName]->getDataFields(it->second); - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); // # ARMARX_IMPORTANT << "data from observer: " << observerName; for (unsigned int i = 0; i < variants.size(); ++i) { @@ -521,7 +521,7 @@ namespace armarx { samplingIntervalMs = pollingInterval; } - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); clear(); auto now = TimeUtil::GetTime(); std::map<std::string, TimedVariantBaseList> histories; @@ -721,7 +721,7 @@ namespace armarx QStringList PlotterController::getSelectedDatafields() const { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); return selectedDatafields; } @@ -732,7 +732,7 @@ namespace armarx std::vector<std::string> keys; - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); for (int i = 0; i < selectedDatafields.size(); i++) { @@ -784,7 +784,7 @@ namespace armarx void PlotterController::setSelectedDatafields(const QStringList& value, int samplingIntervalMs) { { - ScopedLock lock(dataMutex); + std::unique_lock lock(dataMutex); if (selectedDatafields == value) { return; diff --git a/source/ArmarXGui/libraries/PlotterController/PlotterController.h b/source/ArmarXGui/libraries/PlotterController/PlotterController.h index d3f46386..f149b12d 100644 --- a/source/ArmarXGui/libraries/PlotterController/PlotterController.h +++ b/source/ArmarXGui/libraries/PlotterController/PlotterController.h @@ -51,13 +51,14 @@ #include <ArmarXCore/util/json/JSONObject.h> #include <ArmarXCore/core/time/TimeUtil.h> #include <ArmarXCore/core/services/tasks/PeriodicTask.h> -#include <ArmarXCore/core/system/Synchronization.h> #include <ArmarXCore/observers/variant/DataFieldIdentifier.h> #include <ArmarXCore/observers/variant/Variant.h> #include <ArmarXCore/observers/exceptions/local/InvalidChannelException.h> #include <ArmarXCore/observers/exceptions/local/InvalidDataFieldException.h> #include <ArmarXCore/interface/observers/ObserverInterface.h> +#include <mutex> + namespace armarx { using QwtPlotMarkerPtr = QwtPlotMarker*; @@ -158,7 +159,7 @@ namespace armarx IceManagerPtr iceManager; PeriodicTask<PlotterController>::pointer_type pollingTask; QTimer timer; - mutable Mutex dataMutex; + mutable std::mutex dataMutex; GraphDataMap dataMap; ProxyMap proxyMap; std::map<std::string, QwtPlotCurve*> curves; -- GitLab