diff -urN netxms-1.2.17/src/server/core/node.cpp netxms-1.2.17.new/src/server/core/node.cpp --- netxms-1.2.17/src/server/core/node.cpp 2014-10-18 22:36:00.000000000 +0300 +++ netxms-1.2.17.new/src/server/core/node.cpp 2014-10-27 21:13:55.000000000 +0200 @@ -5326,6 +5326,13 @@ else if (iface->getPeerNodeId() != 0) { Node *peerNode = (Node *)FindObjectById(iface->getPeerNodeId(), OBJECT_NODE); + if (peerNode == NULL) + { + DbgPrintf(6, _T("Node::topologyPoll(%s [%d]): peer node set but node object does not exist"), m_name, m_id); + iface->clearPeer(); + continue; + } + if (peerNode->isDown()) continue; // Don't change information about down peers diff -urN netxms-1.2.17/src/server/include/nms_objects.h netxms-1.2.17.new/src/server/include/nms_objects.h --- netxms-1.2.17/src/server/include/nms_objects.h 2014-10-18 22:36:00.000000000 +0300 +++ netxms-1.2.17.new/src/server/include/nms_objects.h 2014-10-27 21:15:56.000000000 +0200 @@ -692,7 +692,7 @@ void setPhysicalPortFlag(bool isPhysical) { if (isPhysical) m_flags |= IF_PHYSICAL_PORT; else m_flags &= ~IF_PHYSICAL_PORT; Modify(); } void setManualCreationFlag(bool isManual) { if (isManual) m_flags |= IF_CREATED_MANUALLY; else m_flags &= ~IF_CREATED_MANUALLY; Modify(); } void setPeer(Node *node, Interface *iface, LinkLayerProtocol protocol, bool reflection); - void clearPeer() { m_peerNodeId = 0; m_peerInterfaceId = 0; m_peerDiscoveryProtocol = LL_PROTO_UNKNOWN; Modify(); } + void clearPeer() { LockData(); m_peerNodeId = 0; m_peerInterfaceId = 0; m_peerDiscoveryProtocol = LL_PROTO_UNKNOWN; Modify(); UnlockData(); } void setDescription(const TCHAR *descr) { LockData(); nx_strncpy(m_description, descr, MAX_DB_STRING); Modify(); UnlockData(); } void updateZoneId();