refcount bug

Hi,

I have a problem with matplotlib crashing with a ref count assertion error. I see this problem intermittently both when using ipython using %run to execute plot scripts many times and when embedding a plot in a Tk application.
In both cases I use TkAgg as a backend I have compiled matplotlib r3933 using mingw32 on windows using the win32_static library.

The smallest self contained example I have been able to come up with is this:

import random,time
from numpy import pi,arange,sin
import pylab

pylab.ion()
x=arange(0,6*pi,0.1)
for i in range(1000):
     print i
     pylab.cla()
     for i in range(1):
         pylab.plot(x,sin(random.random()*pi+x*random.random()))

which when executed generates the following output. Running this script several times I get the crash after around 60 iterations. On crash I also a messagebox, see attached png file.

Does anyone else see this? What can I do to help narrow down this bug.

/J�rgen

C:\python>python bugtest-matplotlib.py
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Fatal Python error: PyEval_RestoreThread: NULL tstate

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

bugtest-matplotlib.png

An an extra data point, the attached script runs for over 1000 iterations on Linux. By no means am I suggesting that as a fix :wink: ...just a data point for someone on Windows that this is probably Windows-specific.

Cheers,
Mike

J�rgen Stenarson wrote:

···

Hi,

I have a problem with matplotlib crashing with a ref count assertion error. I see this problem intermittently both when using ipython using %run to execute plot scripts many times and when embedding a plot in a Tk application.
In both cases I use TkAgg as a backend I have compiled matplotlib r3933 using mingw32 on windows using the win32_static library.

The smallest self contained example I have been able to come up with is this:

import random,time
from numpy import pi,arange,sin
import pylab

pylab.ion()
x=arange(0,6*pi,0.1)
for i in range(1000):
    print i
    pylab.cla()
    for i in range(1):
        pylab.plot(x,sin(random.random()*pi+x*random.random()))

which when executed generates the following output. Running this script several times I get the crash after around 60 iterations. On crash I also a messagebox, see attached png file.

Does anyone else see this? What can I do to help narrow down this bug.

/J�rgen

C:\python>python bugtest-matplotlib.py
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Fatal Python error: PyEval_RestoreThread: NULL tstate

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

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

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

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/

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

_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options

--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

I also ran to 1000 on solaris -- make sure your build is clean, eg by
removing both the "build" subdirectory and the mpl install directory
when compiling matplotlib. Also, it would be interesting to know if
you get this problem in the Agg or PS backend, eg when just saving
figures and not displaying them in a GUI.

JDH

···

On 10/11/07, Michael Droettboom <mdroe@...31...> wrote:

An an extra data point, the attached script runs for over 1000
iterations on Linux. By no means am I suggesting that as a fix :wink:
...just a data point for someone on Windows that this is probably
Windows-specific.

You're right I'm stuck on windows. I just realised I forgot to say that I'm using python 2.4.

/J�rgen

Michael Droettboom skrev:

···

An an extra data point, the attached script runs for over 1000 iterations on Linux. By no means am I suggesting that as a fix :wink: ...just a data point for someone on Windows that this is probably Windows-specific.

Cheers,
Mike

J�rgen Stenarson wrote:

Hi,

I have a problem with matplotlib crashing with a ref count assertion error. I see this problem intermittently both when using ipython using %run to execute plot scripts many times and when embedding a plot in a Tk application.
In both cases I use TkAgg as a backend I have compiled matplotlib r3933 using mingw32 on windows using the win32_static library.

The smallest self contained example I have been able to come up with is this:

import random,time
from numpy import pi,arange,sin
import pylab

pylab.ion()
x=arange(0,6*pi,0.1)
for i in range(1000):
    print i
    pylab.cla()
    for i in range(1):
        pylab.plot(x,sin(random.random()*pi+x*random.random()))

which when executed generates the following output. Running this script several times I get the crash after around 60 iterations. On crash I also a messagebox, see attached png file.

Does anyone else see this? What can I do to help narrow down this bug.

/J�rgen

C:\python>python bugtest-matplotlib.py
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Fatal Python error: PyEval_RestoreThread: NULL tstate

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

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

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

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/

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

_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options

John Hunter skrev:

An an extra data point, the attached script runs for over 1000
iterations on Linux. By no means am I suggesting that as a fix :wink:
...just a data point for someone on Windows that this is probably
Windows-specific.

I also ran to 1000 on solaris -- make sure your build is clean, eg by
removing both the "build" subdirectory and the mpl install directory
when compiling matplotlib. Also, it would be interesting to know if
you get this problem in the Agg or PS backend, eg when just saving
figures and not displaying them in a GUI.

My build was done on after deleting build and dist. I usually have build/lib-win32-2.4 on my python path, i.e. I do not run the install step.

However I just discovered another thing that may narrow the problem down. If I delete the fontManager.cache file I get the crash immidiately on startup at the import of pylab, the only information is the same messagebox as before.

Keeping the fontManager.cache file I reran the script for different backends both with and without the pylab.ion() line in the script.

  ion ioff
TkAgg 63 (1) 999
WX 390 (2) 999
WXAgg 57 (3) 999
Agg 999 999

(1)
Fatal Python error: PyEval_RestoreThread: NULL tstate

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

(2)
Traceback (most recent call last):
   File "bugtest-matplotlib.py", line 13, in ?
     pylab.plot(x,sin(random.random()*pi+x*random.random()))
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\pyplot.py", line 1798, in plot
     draw_if_interactive()
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\backends\backend_wx.py", line 1
217, in draw_if_interactive
     figManager.canvas.draw()
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\backends\backend_wx.py", line 9
48, in draw
     self.figure.draw(self.renderer)
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\figure.py", line 612, in draw
     for a in self.axes: a.draw(renderer)
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\axes.py", line 1338, in draw
     a.draw(renderer)
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\axis.py", line 593, in draw
     tick.draw(renderer)
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\axis.py", line 167, in draw
     if self.tick1On: self.tick1line.draw(renderer)
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\lines.py", line 526, in draw
     gc = renderer.new_gc()
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\backends\backend_wx.py", line 3
97, in new_gc
     self.gc.select()
   File "c:\python\external\matplotlib\build\lib.win32-2.4\matplotlib\backends\backend_wx.py", line 5
16, in select
     self.SelectObject(self.bitmap)
   File "C:\Python24\Lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", line 4768, in SelectObject
     return _gdi_.MemoryDC_SelectObject(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "m_refData && m_refData->GetRefCount() == 1" failed at ..\.
.\src\common\object.cpp(347) in wxObject::AllocExclusive(): wxObject::AllocExclusive() failed.

(3)
No output at all

···

On 10/11/07, Michael Droettboom <mdroe@...31...> wrote: