New submission from Martin von Gagern <martin.vgag...@gmx.net>:

The attached C extension provides a way to manually set an element in the dict 
of an extension type. As the test case exposes, this can result in a 
discrepancy between cls.__dict__['key'] and cls.key.

Please tell me up front if my extension simply does something explixitely 
forbidden, and point me at the documentation saying so.
http://docs.python.org/py3k/c-api/typeobj.html#PyTypeObject.tp_dict at least 
doesn't appear to explicitely forbid my approach, even if it probably is not 
the preferred way.

If you consider what I'm doing to be really evil, you might want to ban that 
practice more clearly, by adding a suitable note to the documentation of the 
tp_dict member.

In case you cannot reproduce, running the attached testcase script with "test" 
as its sole command line argument, I get the following lines, among others:

Traceback (most recent call last):
  File ".../setDictTest.py", line 10, in test1
    self.assertEqual(setDictCls.__dict__['key'], setDictCls.key)
AssertionError: 'bar' != 'foo'

I assume that the attribute-style setDictCls.key access will somehow cache its 
result, thus missing the modification to the underlying dict. Just a guess, 
though.

I've had this issue involved in segmentation faults, where the stale object had 
already been finalized. But as the code involved there might have been broken 
in other ways as well, I'll not classify this as type "crash" but only as 
"behaviour".

----------
components: Extension Modules
files: setup.py
messages: 141840
nosy: gagern
priority: normal
severity: normal
status: open
title: Direct access to tp_dict can lead to stale attributes
type: behavior
versions: Python 3.2
Added file: http://bugs.python.org/file22868/setup.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue12719>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to