fixed server deadlock
authorVictor Kirhenshtein <victor@netxms.org>
Wed, 20 Jul 2016 05:43:55 +0000 (08:43 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Wed, 20 Jul 2016 05:44:08 +0000 (08:44 +0300)
src/server/core/agent_policy.cpp
src/server/core/netobj.cpp

index e7a95a0..35b9a0a 100644 (file)
@@ -98,7 +98,7 @@ BOOL AgentPolicy::savePolicyCommonProperties(DB_HANDLE hdb)
    // Update node bindings
    _sntprintf(query, 256, _T("DELETE FROM ap_bindings WHERE policy_id=%d"), m_id);
    DBQuery(hdb, query);
-   lockChildList(FALSE);
+   lockChildList(false);
    for(int i = 0; i < m_childList->size(); i++)
    {
       _sntprintf(query, 256, _T("INSERT INTO ap_bindings (policy_id,node_id) VALUES (%d,%d)"), m_id, m_childList->get(i)->getId());
index 07bd52b..6d5f9fd 100644 (file)
@@ -505,7 +505,10 @@ void NetObj::addChild(NetObj *object)
 {
    lockChildList(true);
    if (m_childList->contains(object))
+   {
+      unlockChildList();
       return;     // Already in the child list
+   }
    m_childList->add(object);
    unlockChildList();
        incRefCount();
@@ -520,7 +523,10 @@ void NetObj::addParent(NetObj *object)
 {
    lockParentList(true);
    if (m_parentList->contains(object))
+   {
+      unlockParentList();
       return;     // Already in the parents list
+   }
    m_parentList->add(object);
    unlockParentList();
        incRefCount();