#10113: Calling seed() incorrectly causes Sage to crash with SIGSEGV 
(Segmentation
Fault)
----------------------------+-----------------------------------------------
       Reporter:  drkirkby  |         Owner:  jason   
           Type:  defect    |        Status:  new     
       Priority:  major     |     Milestone:  sage-5.0
      Component:  misc      |    Resolution:          
       Keywords:            |   Work issues:          
Report Upstream:  N/A       |     Reviewers:          
        Authors:            |     Merged in:          
   Dependencies:            |      Stopgaps:          
----------------------------+-----------------------------------------------

Comment (by SimonKing):

 More precisely: When I have
 {{{
      def __cinit__(self, seed=None):
          print "id for alloc",id(self)
          gmp_randinit_default(self.gmp_state)
      def __init__(self, seed=None):
          print "seed for init",seed
          print "id for init",id(self)
          cdef mpz_t mpz_seed

          if seed is None:
              if use_urandom:
                  seed = long(binascii.hexlify(os.urandom(16)), 16)
              else:
                  seed = long(time.time() * 256)
          else:
              seed = long(seed)

          # If seed==0, leave it at the default seed used by
          # gmp_randinit_default()
          if seed:
              mpz_init(mpz_seed)
              mpz_set_pylong(mpz_seed, seed)
              gmp_randseed(self.gmp_state, mpz_seed)
              mpz_clear(mpz_seed)

          self._seed = seed
      def __dealloc__(self):
          print "id for dealloc",id(self)
          gmp_randclear(self.gmp_state)
 }}}
 I get:
 {{{
 ----------------------------------------------------------------------
 | Sage Version 5.1.notebook, Release Date: 2012-04-15                |
 | Type notebook() for the GUI, and license() for information.        |
 ----------------------------------------------------------------------
 **********************************************************************
 *                                                                    *
 * Warning: this is a prerelease version, and it may be unstable.     *
 *                                                                    *
 **********************************************************************
 seed in cinit None
 id for cinit 12399568
 seed for init None
 id for init 12399568
 seed in cinit None
 id for cinit 75637328
 seed for init None
 id for init 75637328
 id for dealloc 12399568
 sage: seed(1)
 seed in cinit 1
 id for cinit 75640528
 seed for init 1
 id for init 75640528
 <sage.misc.randstate.randstate object at 0x4822ed0>
 sage: seed(2)
 seed in cinit 2
 id for cinit 76091984
 seed for init 2
 id for init 76091984
 <sage.misc.randstate.randstate object at 0x4891250>
 sage: seed(1,2)
 id for dealloc 76092624
 
/mnt/local/king/SAGE/experiment/notebook/sage-5.1.notebook/local/lib/libcsage.so(print_backtrace+0x31)[0x7fd1916192d0]
 }}}

 You see: The last line has a dealloc, without a previous alloc.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10113#comment:4>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to