From 02b69f4a7009502a6fb3b3bc9db14ef1d29b188b Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis Date: Tue, 31 Mar 2015 13:32:13 -0700 Subject: [PATCH 1/3] Enabling the use of #ifdef DEBUG as a platform neutral idiom --- CMakeLists.txt | 1 + libraries/shared/src/StreamUtils.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 296a566fa4..fdeb6dfd0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,7 @@ set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets") project(hifi) add_definitions(-DGLM_FORCE_RADIANS) +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") if (WIN32) add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_WARNINGS) diff --git a/libraries/shared/src/StreamUtils.cpp b/libraries/shared/src/StreamUtils.cpp index f58115d288..b2ea5d95a4 100644 --- a/libraries/shared/src/StreamUtils.cpp +++ b/libraries/shared/src/StreamUtils.cpp @@ -66,7 +66,9 @@ QDataStream& operator>>(QDataStream& in, glm::quat& quaternion) { } // less common utils can be enabled with DEBUG -#ifdef DEBUG +// FIXME, remove the second defined clause once these compile, or remove the +// functions. +#if defined(DEBUG) && defined(FIXED_STREAMS) std::ostream& operator<<(std::ostream& s, const CollisionInfo& c) { s << "{penetration=" << c._penetration From 740438d08dd5ab07fc86b4a4bcd64907ed022327 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 31 Mar 2015 16:11:41 -0700 Subject: [PATCH 2/3] handle domain-server local port changes once connected --- libraries/networking/src/AddressManager.cpp | 10 +--------- libraries/networking/src/AddressManager.h | 2 -- libraries/networking/src/DomainHandler.h | 1 + libraries/networking/src/NodeList.cpp | 17 +++++++++++++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 3c27c4644c..f8b297c025 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -33,8 +33,7 @@ AddressManager::AddressManager() : _rootPlaceName(), _rootPlaceID(), _positionGetter(NULL), - _orientationGetter(NULL), - _localDSPortSharedMem(NULL) + _orientationGetter(NULL) { connect(qApp, &QCoreApplication::aboutToQuit, this, &AddressManager::storeCurrentAddress); } @@ -331,13 +330,6 @@ bool AddressManager::handleNetworkAddress(const QString& lookupString) { quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; - if (domainHostname == "localhost") { - auto nodeList = DependencyManager::get(); - nodeList->getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, - _localDSPortSharedMem, - domainPort); - } - if (!hostnameRegex.cap(2).isEmpty()) { domainPort = (qint16) hostnameRegex.cap(2).toInt(); } diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index a2522afcbc..db1cd6a3c8 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -95,8 +95,6 @@ private: QUuid _rootPlaceID; PositionGetter _positionGetter; OrientationGetter _orientationGetter; - - QSharedMemory* _localDSPortSharedMem; // memory shared with domain server }; #endif // hifi_AddressManager_h diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 0877f657e1..35ef7d8e2c 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -47,6 +47,7 @@ public: void setSockAddr(const HifiSockAddr& sockAddr, const QString& hostname); unsigned short getPort() const { return _sockAddr.getPort(); } + void setPort(quint16 port) { _sockAddr.setPort(port); } const QUuid& getAssignmentUUID() const { return _assignmentUUID; } void setAssignmentUUID(const QUuid& assignmentUUID) { _assignmentUUID = assignmentUUID; } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index e63f230f6e..83424d7688 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -277,6 +277,23 @@ void NodeList::sendDomainServerCheckIn() { if (!_domainHandler.isConnected()) { qDebug() << "Sending connect request to domain-server at" << _domainHandler.getHostname(); + + // is this our localhost domain-server? + // if so we need to make sure we have an up-to-date local port in case it restarted + + if (_domainHandler.getSockAddr().getAddress() == QHostAddress::LocalHost + || _domainHandler.getHostname() == "localhost") { + + static QSharedMemory* localDSPortSharedMem = NULL; + + quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; + getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, + localDSPortSharedMem, + domainPort); + qDebug() << "Local domain-server port read from shared memory (or default) is" << domainPort; + _domainHandler.setPort(domainPort); + } + } // construct the DS check in packet From 64921c38b614262f4113dfcddcdc7ac72b2941b5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 31 Mar 2015 16:25:22 -0700 Subject: [PATCH 3/3] don't overlock in killNodeWithUUID --- libraries/networking/src/LimitedNodeList.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index ebd10b67a6..57977910c7 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -392,8 +392,9 @@ void LimitedNodeList::killNodeWithUUID(const QUuid& nodeUUID) { _nodeMutex.unlock(); - QWriteLocker writeLocker(&_nodeMutex); + _nodeMutex.lockForWrite(); _nodeHash.unsafe_erase(it); + _nodeMutex.unlock(); handleNodeKill(matchingNode); } else {