diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp index 4d1107c456655e05c56e1b68ec4e4fc8c1388e61..dee84969496bdf657b3f5fce3eccfe9f99158b91 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 a57c5a5e099b212d1d7027c6703a28ab41c14901..650431f3964a00830b06b32aad57afda9724abed 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 752346c14d5362a1b56a11e6676f29efe7400e4c..1fa5a84c1a4b8e4beb68bcca780116de6a7e103c 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 947a1047955affb1538486e55f1b2f625af5dc79..2f096cbca3a37c8abf04aa58ff653d8193e1cc08 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 cf348498c8904ad0686ea4a873c447a43eb15b71..3cd4b3c941583b9068a7b509015e3b17985b5af7 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 e92aafc58b5447c4cafb570cf9e9e585e2001de0..7c131ad2c96912f9e7b38981fe1dabf79e514701 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 e7feb69849325d2ef7341d80b32bdf93ad46ec80..529d6cf00569a604df63c27150625dbc7e85fbd4 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 270227763994d67bf4538eb5ce3f3e00215ca441..6a3f43e3095d048e59d1b4bcd5887ee629e4b29b 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 8416fbf4d4ec65b2810e599599cd0e0e41959c75..cde510dd72977fe257523e99ac535b77b2c5ea6c 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 9c1e8a4f74d230eb762ba902ad6920244efc70ab..f43f75bf5c441def0bab0d0e119be696cae25322 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 7c0931802766de70ff50c59117eaa12214dc2583..0203b80ad3a32fdaa7ecac3b6f8b08ba6f49c968 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 cc4daccbe27c4ee86af50e41660686213f6a9851..6a09064834965094838e89a13a52cab14e2cce2e 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 8a547a42c14c2c6101e2408322c9fb294d8ff501..0e26bc47f1e79010d8e633a51c5e2d8a38937ff1 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 5742c90993808da6a40b0647cbf0ae78565fcfdb..3c52e1de34abca4f538ef46cce8bd85ff111175e 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 d7d424842085f4a197cc223a2c2f5d47614f84a5..c7dcf492120375360267a0c071c11a7ade1efee1 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 c3825b41be635a2ce92064818d60cc5c345cd5ca..55b8acf7555e53bd7d0c6c122b369d0089d3bd54 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 70aebfacd44bbe499fc80b4e1a443c026b8c8c2a..9a4846c9c1a62507f9cc939c191b2606f9894018 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 8dfa2841fd13e027743fdb21b2d1b8e8f7840410..3754ef745d300b6415f0469657a479de2f02f1a0 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 9cfacd2d87b337e750df14f90056cbe0833f287c..f4ada85aecc5def49857d8a41a9af27a33557694 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 e70fe69e3093982b843f96af8a6fa0b89f105836..6e8e9fbb6b6b20aaf0908955f1ac5fe4803c841e 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 6b0fc86690676138693948d1f80c499a6952e65c..5b03fbbfc5ce29ab5eca0ce8155fe4bad7bbb6c2 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 64aaf74af0e2ebd4c8b7d4cd5b582ba75c12f160..bdc4d56145edd7bdbd685adf69835208445b3700 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 a309d5c62be508325152fde3e1197d52c19d810d..8c1fc45ec936416244bd44b92d793b70ecbb7316 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 49869fcace45afb158d1293b866e9e9759175b59..25720df8a369d682bc4cd5b65cf574a20fc2134b 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 2860562610769b27a46b0173d284e35f05b6cee7..682a6e60ed5927229c8a81e9896035bfc273ad43 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 3066deb072fd882b3fcd9a979d2d6a9b403390c8..370b13bbd9b5c7868643b2c8ce67774a3909ca6b 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 a86870e70f915ca7c0ed08d42b8f44c2188ee4c1..2a9e0c18a9c1e53004dee8bb3a5eb890d37ae5a7 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 e72d92bfb5d2be9c752e9287f38b0ec1443ef163..b7cb52ad012820f5fd61deaa367e888a04c8f3e3 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 25cd2b9d9ba152e54d458def954a8995de52442e..0b4bfe742ccfed9f08413f7bb0f17523f6dd999e 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 bbcba37c53287a6487594eb8e9233e32b83e7548..09a94e3562bb8bbb425db3466d4a8c1d94040dd4 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 8d30749890671e0f360e68f09443a47cb068fea7..ac03ff99447034706501ca8cb778af12c365a250 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 2031f34e85843e9d36fd53d907fde36a2543409a..40100e75285d5991a090471defb69d825fab3fcb 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 4c622068e158a8804fe6adc8149cfa1497921675..2b8b5b8964bf0e70487c0dde4cd25b4ae22e5d5d 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 635a8d268bfc908af991d2672333d84c2baa92d4..7e07807e363a1c37e6c3ab45cc0c92845748ea7f 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 90da915f30b7e811c45e6ffc161134984241327a..d718f49c4aa258d1a65ab244815c4d654d0c8bbe 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 78a04bc8523f6bfc2df1bca80be14322a38d26e0..1e1702cb666bb408928531651460859f467e2252 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 2a9cf3aa9c6e403ebfde4a0b36ead50d5c4e1ae1..e8fc6d7a40cf82fdee1039bbdf1a9bf29ccdc39b 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 a23e661df756e82ce0888e1c322e1d4af45ef4a5..1c05ad96c83a404727a88a5f04d0ed39fcb41835 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 906ba6f34428e8c7fcacce9c07fc1374cec462c3..1e2518051ce76365a6d1adf005887f80a774f48b 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 96f91b0405fb860c29be0de914912b9ef54ce25e..d067affccc184adf49a432f7e3ed0c0116ba0e22 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 d10caf77f55c1ab39cb917874d635320cf3472ce..b4b5447340854be02aa7fb6871369dfe56d070cc 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 4ef5c1618d911435def92e0835ddd5c26d2736be..f1b7ad48be8385cc1fea3202735a25c952fe9050 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 d5125becd03cbf26efc031355f72acd22834addb..13eb8ddd1f6a3ce7fdd8cc1a69d6a02c8b6f80cc 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 50c93a9a807adc36b3d8474ef0f7dbdd5b1ceefc..776dc111cb5da70d3a3db3b95f364227dcfe46e2 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 60af383b0d1286dce6b6bc6d23968b42a3afcf70..dbc871f0f2ddfd7d870952375da58baf84f11b6c 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 3826576597f844793a66f002982f350ff189be70..355ca545e06f7c60e667778fd60b4355fa6fdee1 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 e49ab663873c7e21c79a11e3e7390588f85a7e3e..7e9d00ed50d5eb8b6620123c647634fad36a4a7c 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 3adcfe7d06e441172c403058f66d1eacea75cfb6..e03d1b0921362b866313ce6b58979000a48bd5c8 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 d36765f207227f64b98be9601fc1f1567c4a1dca..736f9979cf6c919e4a13c9c54a83570e2d0e3cb3 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 78b2968d26fa1e4a380b6c783b188ec6d1d85647..386423e32a4ac682598bb82ecdaa88b2a2438f7e 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 48dd0305da463624739ac2ccaca29fcf3761edf9..81449fa22371d07ecfd1d273c7c49a57cdec37e8 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 86347a1868f1cfbb3d1157be0e9c62155a8b062b..f734b4b62574d8936f50d2c8b7d7a787f138df58 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 68f4e38931857407cf2fbbac51d3f856b57d7ff3..b1ac02e1150a94dd18fc6b71c1a880402bc142ba 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 9253967243d881c12735783d2dfcf9bcb96a1355..5412e5db6687cd46725e3411a56d7bc5c2fc5ce5 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 b62e540f4497902a0f1e93d5bdfad68b5c9d49cb..6c4a8f99ed69fe16308f875a5228d2f46e58ac7f 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 1882a42866ffb905cfd7aaebf6ffd1d35a76cd77..db5577735729a10584e529d0d30026d70aca6495 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 8ffc9ab519b5092defb592321521b2fc17a4334a..a7f0c1abc507f66b6a83a3e9723c6e8f6bc52b50 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 8d3d6ed57e3d6138fa64d67759c27ba0f6ee7ecb..1c36823b8fa30ff91913674c7b6b65c048fcd431 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 83fe97042ec1d8dfba27cca8df98dc5f0b6b10b3..3c0dd8064ff0ab41a7da1acc5e3bf25f8211456c 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 776681f813cea256f42b057efd69063015f5e548..40b0d0d122f728e4c2965278a48dfc49f94299d9 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 78e8f0bba9345abc898237f5f4f6c28559658267..e1440027840081f41270099d2c6c24dd7166df86 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 809b1094737b290eb5026436c90655f3bf817df7..791c68ec56e88911f4ba24e49fe9826405177dc3 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 6e42d3db64df5f3535775b2da121aae8a1cfd7f6..2ab2ddc26ff15a56e2c876c7788fd6d219954d86 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 55f7655937b0441f8b63d3188de346763f6d32ac..0c21ca6757c4b9b7e225b42d0cc1358b2120fa00 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 d3f4638611a60267c7e26adb00068c05086c46ad..f149b12da0f9fd8676ceb51679e10c5e6271fdb5 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;