Module: wine Branch: master Commit: 01dd81a78c16130629e97ea8bc598e284363a530 URL: http://source.winehq.org/git/wine.git/?a=commit;h=01dd81a78c16130629e97ea8bc...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Feb 25 15:36:56 2013 +0400
msxml3: Update refcount in replaceNode().
---
dlls/msxml3/node.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 8571955..20f9ba9 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -511,6 +511,7 @@ HRESULT node_replace_child(xmlnode *This, IXMLDOMNode *newChild, IXMLDOMNode *ol xmlnode *old_child, *new_child; xmlDocPtr leaving_doc; xmlNode *my_ancestor; + int refcount = 0;
/* Do not believe any documentation telling that newChild == NULL means removal. It does certainly *not* apply to msxml3! */ @@ -548,9 +549,13 @@ HRESULT node_replace_child(xmlnode *This, IXMLDOMNode *newChild, IXMLDOMNode *ol WARN("%p is not an orphan of %p\n", new_child->node, new_child->node->doc);
leaving_doc = new_child->node->doc; - xmldoc_add_ref(old_child->node->doc); + + if (leaving_doc != old_child->node->doc) + refcount = xmlnode_get_inst_cnt(new_child); + + if (refcount) xmldoc_add_refs(old_child->node->doc, refcount); xmlReplaceNode(old_child->node, new_child->node); - xmldoc_release(leaving_doc); + if (refcount) xmldoc_release_refs(leaving_doc, refcount); new_child->parent = old_child->parent; old_child->parent = NULL;