From the newsgroup. Any thoughts? Mark. "Phil Mayes" <nospam@bitbucket.com> wrote in message news:<olD35.82$_%.4481@newsfeed.avtel.net>... > The following program progressively allocates all memory: > size = 1 << 20 > list = [None,] > while size: > try: > mem = [None] * size > mem[0] = list > list = mem > except: > size = size / 2 > > It fails with an access violation. (Turn off virtual memory > to provoke it.) This is not a theoretical situation for me: > I have a beta release in the field that is crashing like this. > The immediate cause is this: > > 1. we are handling a MemoryError > 2. the following call cannot allocate a traceback object > ceval.c line 1800: PyErr_Fetch(&exc, &val, &tb); > 3. the NULL pointer at tb is pushed here: > ceval.c line 1816: PUSH(tb); > ceval.c line 1817: PUSH(val); > ceval.c line 1818: PUSH(exc); > 4. later it is popped here and its ref count is decremented: > ceval.c line 682: case POP_TOP: > ceval.c line 683: v = POP(); > ceval.c line 684: Py_DECREF(v); > ceval.c line 685: continue; > > This is with 1.5.2 but the crash still happens with 1.6a2. > At this stage I am way out of my depth, and the only way I > see to fix this is to change Py_DECREF to Py_XDECREF, which > is a (minor?) inefficiency. Can anyone recommend a better way? > > And should I report this at http://www.python.org/python-bugs? > I do not have access to the current CVS tree. > > TIA, Phil Mayes > -- > pmayes AT olivebr DOT com > > >
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4