[Python-Dev] Mixing memory management APIs

Neal Norwitz neal@metaslash.com
Wed, 06 Feb 2002 18:34:24 -0500


"M.-A. Lemburg" wrote:
> 
> Neal Norwitz wrote:
> 
> > "M.-A. Lemburg" wrote:
> >
> >
> >>I've checked in a patch for the UTF-8 codec problem. Could you
> >>try Purify against the CVS version ?
> >>
> >
> > with-pymalloc or without or both?
> 
> Both if possible -- the leakage showed up with pymalloc AFAIR :-)

There is a lot of data and it's very hard to follow, 
but I'm trying to provide as much info as I can.  
Let me know how I can make this info easier to use.

Here is a summary:

    * I'm using gcc version 2.95.3, on Solaris 8, Purify 2002.

    * The new patches don't fix all the problems, but it may
	reduce the problems (I'm not sure).  I think there were
	13k errors on build before, it's 5.5k now.

    * test_unicodedata fails:
		*** mismatch between line 3 of expected output and 
			line 3 of actual output:
		- Methods: 6c7a7c02657b69d0fdd7a7d174f573194bba2e18
		+ Methods: 3051e6d4d117133c3e36a5c22b3a1ae362474321

    * Purify now has 2 UMRs now w/o pymalloc, but they are in
	fwrite() and contain no usable stack trace.

    * It's probably best to try using Electric Fence and/or dbmalloc.
	This may give better results than Purify.

    * There is a warning from sre.h that may be significant:
	Modules/sre.h:24: warning: `SRE_CODE' redefined
	Modules/sre.h:19: warning: this is the location 
			  of the previous definition

I'll try some more things to see if I can get better info.

Neal
--

bash-2.03$ ./configure --with-pymalloc --enable-unicode=ucs4
bash-2.03$ make PURIFY=purify

--->  5542 errors
	Free Memory Read, Array Bounds Read, and Uninit Memory Read errors
		at lines unicodeobject.c:2214 & 2875
		(both are bogus lines)

	2214 is in:  PyUnicode_TranslateCharmap()
	2875 is in:  split_char()

bash-2.03$ ./python -E -tt Lib/test/regrtest.py test_unicode.py \ 
			test_unicode_file.py test_unicodedata.py
test_unicode
test test_unicode crashed -- exceptions.UnicodeError: UTF-8 decoding error: illegal encoding
test_unicode_file
test_unicodedata
test test_unicodedata produced unexpected output:
**********************************************************************
*** mismatch between line 3 of expected output and line 3 of actual output:
- Methods: 6c7a7c02657b69d0fdd7a7d174f573194bba2e18
+ Methods: 3051e6d4d117133c3e36a5c22b3a1ae362474321
**********************************************************************
1 test OK.
2 tests failed:
    test_unicode test_unicodedata

--------------------------------------------------------------------

Without purify, test_unicode completed successfully, but unicodedata
produced the same results.

The errors produced in purify for these 3 tests were 99745.
The errors were in the same places as for the build step.

--------------------------------------------------------------------

bash-2.03$ make clean
bash-2.03$ ./configure --enable-unicode=ucs4  
bash-2.03$ make PURIFY=purify 

bash-2.03$ ./python -E -tt Lib/test/regrtest.py test_unicode.py \ 
			test_unicode_file.py test_unicodedata.py
test test_unicodedata produced unexpected output:
**********************************************************************
*** mismatch between line 3 of expected output and line 3 of actual output:
- Methods: 6c7a7c02657b69d0fdd7a7d174f573194bba2e18
+ Methods: 84b72943b1d4320bc1e64a4888f7cdf62eea219a
**********************************************************************
2 tests OK.
1 test failed:
    test_unicodedata

--------------------------------------------------------------------

Purify did have 2 UMRs, but both contain almost no information:

      UMR: Uninitialized memory read
      This is occurring while in:
            _write         [libc.so.1]
            _xflsbuf       [libc.so.1]
            _fflush_u      [libc.so.1]
            fseek          [libc.so.1]
            *unknown func* [pc=0xe417c]
            *unknown func* [pc=0xe4db4]
            *unknown func* [pc=0xe64c4]
            *unknown func* [pc=0xe5cf0]
            *unknown func* [pc=0xe5524]
            *unknown func* [pc=0xe58a0]
            *unknown func* [pc=0x160464]
            *unknown func* [pc=0x159b64]
      Reading 3609 bytes from 0x6a2fcc in the heap (4 bytes at 0x6a3706 uninit).
      Address 0x6a2fcc is 4 bytes into a malloc'd block at 0x6a2fc8 of 8200 bytes.
      This block was allocated from:
            do_mkvalue     [modsupport.c:243]
            _findbuf       [libc.so.1]
            _wrtchk        [libc.so.1]
            _flsbuf        [libc.so.1]
            putc           [libc.so.1]
            *unknown func* [pc=0xe8b9c]
            *unknown func* [pc=0xed794]
            *unknown func* [pc=0xe4104]
            *unknown func* [pc=0xe4db4]
            *unknown func* [pc=0xe64c4]
            *unknown func* [pc=0xe5cf0]
            *unknown func* [pc=0xe5524]

--------------------------------------------------------------------

      UMR: Uninitialized memory read
      This is occurring while in:
            _write         [libc.so.1]
            _xflsbuf       [libc.so.1]
            _fwrite_unlocked [libc.so.1]
            fwrite         [libc.so.1]
            *unknown func* [pc=0xeaa50]
            *unknown func* [pc=0xeadf4]
            *unknown func* [pc=0xeb3c8]
            *unknown func* [pc=0xed7e8]
            *unknown func* [pc=0xe411c]
            *unknown func* [pc=0xe4db4]
            *unknown func* [pc=0xe64c4]
            *unknown func* [pc=0xe5cf0]
      Reading 8192 bytes from 0x79d88c in the heap (4 bytes at 0x79de8d uninit).
      Address 0x79d88c is 4 bytes into a malloc'd block at 0x79d888 of 8200 bytes.
      This block was allocated from:
            do_mkvalue     [modsupport.c:243]
            _findbuf       [libc.so.1]
            _wrtchk        [libc.so.1]
            _flsbuf        [libc.so.1]
            putc           [libc.so.1]
            *unknown func* [pc=0xe8b9c]
            *unknown func* [pc=0xed794]
            *unknown func* [pc=0xe4104]
            *unknown func* [pc=0xe4db4]
            *unknown func* [pc=0xe64c4]
            *unknown func* [pc=0xe5cf0]
            *unknown func* [pc=0xe5524]