[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2015-10-02 Thread STINNER Victor

Changes by STINNER Victor :


--
resolution:  -> out of date
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2015-04-09 Thread STINNER Victor

STINNER Victor added the comment:

Serhiy recently worked on MemoryError, maybe he wants to work on this issue?

I'm no more interested to work on this issue.

--
nosy: +serhiy.storchaka

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2015-04-09 Thread R. David Murray

R. David Murray added the comment:

Victor, do you still want to champion this, or shall we close it?

--
nosy: +r.david.murray

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2013-12-01 Thread Alexandre Vassalotti

Changes by Alexandre Vassalotti :


--
nosy:  -alexandre.vassalotti

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2013-11-29 Thread Arfrever Frehtes Taifersar Arahesis

Changes by Arfrever Frehtes Taifersar Arahesis :


--
nosy: +Arfrever

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2013-11-29 Thread Antoine Pitrou

Antoine Pitrou added the comment:

> Under very low memory condition, PyErr_NoMemory() or
> PyErr_NormalizeException() enters an unlimited loop when the free list 
> of MemoryError becomes empty.

The real question is why the free list becomes empty.

Either way, I don't think a read-only singleton is a good idea. It may be 
simpler to call Py_FatalError in such cases.

--
nosy: +neologix

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2013-11-29 Thread STINNER Victor

STINNER Victor added the comment:

> Under very low memory condition, PyErr_NoMemory() or 
> PyErr_NormalizeException() enters an unlimited loop when the free list of 
> MemoryError becomes empty.

I got this bug when I worked on the issue #19817 which adds an arbitary limit 
to memory allocations using tracemalloc. I used this limit on the Python test 
suite to check how Python behaves under very low memory condition.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2013-11-29 Thread STINNER Victor

Changes by STINNER Victor :


--
nosy: +alexandre.vassalotti, pitrou

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19835] Add a MemoryError singleton to fix an unlimited loop when the memory is exhausted

2013-11-29 Thread STINNER Victor

New submission from STINNER Victor:

Under very low memory condition, PyErr_NoMemory() or PyErr_NormalizeException() 
enters an unlimited loop when the free list of MemoryError becomes empty.

I propose to add a MemoryError read-only singleton to fix this corner case. 
Attributes cannot be modified, new attributes cannot be added. MemoryError 
attributes values:

* __cause__ = None
* __context__ = None
* __suppress_context__ = False
* __traceback__ = None
* args = ()

PyException_SetTraceback(), PyException_SetCause() and PyException_SetContext() 
do nothing when called on the MemoryError singleton.

A MemoryError can be raised on an integer overflow when computing the size of a 
memory block. In this case, you may still have available free memory and so you 
may be able to build a traceback object, chain exceptions, etc.

If you consider that attributes must be modifiable in this case, we can keep 
the MemoryError unchanged and keep the free list, but add a new special 
"ReadOnlyMemoryError" type which has exactly one instance, preallocated at 
startup (the singleton).

Read-only attributes are required to not keep references to objects when the 
MemoryError (singleton) is ne more used ("destroyed"): see for example 
test_memory_error_cleanup() of test_exceptions.

Python has already a PyExc_RecursionErrorInst singleton, which is used on 
recursion error. It is just a preallocated RuntimeError error, attributes are 
modifiable. Does this exception keep a traceback when it is no more used 
("destroyed")?

Maybe using read-only attributes is overkill? Replacing the free list with a 
singleton is enough?

--

See also issue #5437: before Python had a MemoryError singleton, but it was 
replaced by a free list to not keep references.

changeset:   65690:c6d86439aa91
branch:  3.1
parent:  65672:e4425d68dadf
user:Antoine Pitrou 
date:Thu Oct 28 23:06:57 2010 +
files:   Include/pyerrors.h Lib/test/test_exceptions.py Misc/NEWS 
Objects/exceptions.c Python/errors.c
description:
Merged revisions 85896 via svnmerge from
svn+ssh://python...@svn.python.org/python/branches/py3k


  r85896 | antoine.pitrou | 2010-10-29 00:56:58 +0200 (ven., 29 oct. 2010) | 4 
lines

  Issue #5437: A preallocated MemoryError instance should not hold traceback
  data (including local variables caught in the stack trace) alive infinitely.


--

Another option is maybe to clear frames of the traceback. Issue #17934 added a 
clear() method to frame objects for that.

--
files: memerror_singleton.patch
keywords: patch
messages: 204742
nosy: haypo
priority: normal
severity: normal
status: open
title: Add a MemoryError singleton to fix an unlimited loop when the memory is 
exhausted
versions: Python 3.4
Added file: http://bugs.python.org/file32892/memerror_singleton.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com