#18897: Memory leak in polynomial_compiled.univar_pd
-------------------------------------+-------------------------------------
       Reporter:  slabbe             |        Owner:
           Type:  defect             |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-6.8
      Component:  memleak            |   Resolution:
       Keywords:                     |    Merged in:
        Authors:  Simon King         |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/SimonKing/memory_leak_compiled_polynomial|  
79923d35f59362331a5aa006f8dbc6c329acd440
   Dependencies:                     |     Stopgaps:
-------------------------------------+-------------------------------------

Comment (by dimpase):

 Replying to [comment:10 SimonKing]:
 > Replying to [comment:9 SimonKing]:
 > > It seems that a binary tree is NEVER completely deallocated. When
 calling `binary_tree_dealloc(node)`, then the left and right descendants
 of `node` are deallocated, but not `node` itself.
 >
 > To be precise: The pointer to `node` is freed, but one should call
 `free_binary_tree_node(node)` instead.

 the following looks more logical to me (diff over your patch):
 {{{
 diff --git a/src/sage/misc/binary_tree.pyx b/src/sage/misc/binary_tree.pyx
 index 984ef57..c637d91 100644
 --- a/src/sage/misc/binary_tree.pyx
 +++ b/src/sage/misc/binary_tree.pyx
 @@ -25,13 +25,11 @@ cdef void free_binary_tree_node(binary_tree_node
 *self):
      sage_free(self)

  cdef void binary_tree_dealloc(binary_tree_node *self):
 -    # deallocate the descendants of self, but NOT self
      if self.left != NULL:
          binary_tree_dealloc(self.left)
 -        free_binary_tree_node(self.left)
      if self.right != NULL:
          binary_tree_dealloc(self.right)
 -        free_binary_tree_node(self.right)
 +    free_binary_tree_node(self)


  cdef void binary_tree_insert(binary_tree_node *self, int key, object
 value):
 @@ -210,7 +208,6 @@ cdef class BinaryTree:
          """
          if self.head != NULL:
              binary_tree_dealloc(self.head)
 -            free_binary_tree_node(self.head)

      def insert(BinaryTree self, object key, object value = None):
          """
 }}}

--
Ticket URL: <http://trac.sagemath.org/ticket/18897#comment:14>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to