summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* New tests identical to boom and boom2, except using new-style classes.Tim Peters2003-04-081-0/+44
| | | | | | | These never failed in 2.3, and the tests confirm it. They still blow up in the 2.2 branch, despite that all the gc-vs-__del__ fixes from 2.3 have been backported (and this is expected -- 2.2 needs more work than 2.3 needed).
* correct a couple docstring nitsSkip Montanaro2003-04-081-3/+3
|
* Typo repair.Tim Peters2003-04-081-2/+2
|
* Added example of using positional and keyword args with atexit.register().Fred Drake2003-04-081-0/+15
| | | | Based on a suggestion from a reader.
* Markup fix.Fred Drake2003-04-081-2/+2
|
* s/referrents/referents/g. Gotta love that referrers remains rife with rs.Tim Peters2003-04-084-22/+22
|
* Finished implementing gc.get_referrents(): dealt with error and endTim Peters2003-04-084-7/+58
| | | | cases, wrote docs, added a test.
* Comment repair; no semantic changes.Tim Peters2003-04-071-4/+5
|
* Reworked has_finalizer() to use the new _PyObject_Lookup() insteadTim Peters2003-04-073-78/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | of PyObject_HasAttr(); the former promises never to execute arbitrary Python code. Undid many of the changes recently made to worm around the worst consequences of that PyObject_HasAttr() could execute arbitrary Python code. Compatibility is hard to discuss, because the dangerous cases are so perverse, and much of this appears to rely on implementation accidents. To start with, using hasattr() to check for __del__ wasn't only dangerous, in some cases it was wrong: if an instance of an old- style class didn't have "__del__" in its instance dict or in any base class dict, but a getattr hook said __del__ existed, then hasattr() said "yes, this object has a __del__". But instance_dealloc() ignores the possibility of getattr hooks when looking for a __del__, so while object.__del__ succeeds, no __del__ method is called when the object is deleted. gc was therefore incorrect in believing that the object had a finalizer. The new method doesn't suffer that problem (like instance_dealloc(), _PyObject_Lookup() doesn't believe __del__ exists in that case), but does suffer a somewhat opposite-- and even more obscure --oddity: if an instance of an old-style class doesn't have "__del__" in its instance dict, and a base class does have "__del__" in its dict, and the first base class with a "__del__" associates it with a descriptor (an object with a __get__ method), *and* if that descriptor raises an exception when __get__ is called, then (a) the current method believes the instance does have a __del__, but (b) hasattr() does not believe the instance has a __del__. While these disagree, I believe the new method is "more correct": because the descriptor *will* be called when the object is destructed, it can execute arbitrary Python code at the time the object is destructed, and that's really what gc means by "has a finalizer": not specifically a __del__ method, but more generally the possibility of executing arbitrary Python code at object destruction time. Code in a descriptor's __get__() executed at destruction time can be just as problematic as code in a __del__() executed then. So I believe the new method is better on all counts. Bugfix candidate, but it's unclear to me how all this differs in the 2.2 branch (e.g., new-style and old-style classes already took different gc paths in 2.3 before this last round of patches, but don't in the 2.2 branch).
* New private API function _PyInstance_Lookup. gc will use this to figureTim Peters2003-04-072-0/+33
| | | | out whether __del__ exists, without executing any Python-level code.
* add note suggested by rhettinger about example.Anthony Baxter2003-04-071-0/+3
|
* patch [ 698505 ] docs for hotshot moduleAnthony Baxter2003-04-072-0/+124
|
* initgc(): Rewrote to use the PyModule_AddXYZ API; cuts code size.Tim Peters2003-04-061-17/+14
|
* handle_finalizers(): Rewrote to call append_objects() and gc_list_merge()Tim Peters2003-04-061-36/+31
| | | | | | | | | instead of looping. Smaller and clearer. Faster, too, when we're not appending to gc.garbage: gc_list_merge() takes constant time, regardless of the lists' sizes. append_objects(): Moved up to live with the other list manipulation utilities.
* SF bug #699934: Obscure error messageRaymond Hettinger2003-04-062-7/+4
| | | | | mwh pointed out that the error message did not make sense if obtained by rearranging the bases.
* SF patch #701494: more apply removalsRaymond Hettinger2003-04-0623-2472/+2460
|
* Switched from METH_VARARGS to METH_NOARGS for the 7 module functions thatTim Peters2003-04-061-44/+17
| | | | take no arguments; cuts generated code size.
* Reworked move_finalizer_reachable() to create two distinct lists:Tim Peters2003-04-062-35/+89
| | | | | | | | | externally unreachable objects with finalizers, and externally unreachable objects without finalizers reachable from such objects. This allows us to call has_finalizer() at most once per object, and so limit the pain of nasty getattr hooks. This fixes the failing "boom 2" example Jeremy posted (a non-printing variant of which is now part of test_gc), via never triggering the nasty part of its __getattr__ method.
* move_finalizers(): Rewrote. It's not necessary for this routineTim Peters2003-04-051-29/+20
| | | | | | | | | | | | | | to special-case classic classes, or to worry about refcounts; has_finalizer() deleted the current object iff the first entry in the unreachable list has changed. I don't believe it was correct to check for ob_refcnt == 1, either: the dealloc routine would get called by Py_DECREF then, but there's nothing to stop the dealloc routine from ressurecting the object, and then gc would remain at the head of the unreachable list despite that its refcount temporarily fell to 0 (and that would lead to an infinite loop in move_finalizers()). I'm still worried about has_finalizer() resurrecting other objects in the unreachable list: what's to stop them from getting collected?
* test_boom: More comments. Also check that len(gc.garbage) doesn'tTim Peters2003-04-051-4/+9
| | | | | change (it would be another kind of bug if the trash cycle weren't reclaimed).
* New comments. Rewrote has_finalizer() as a sequence of ifs instead ofTim Peters2003-04-051-6/+21
| | | | | | squashed-together conditional operators; makes it much easier to step thru in the debugger, and to set a breakpoint on the only dangerous path.
* Fixed new seemingly random segfaults, by moving the initialization ofTim Peters2003-04-051-8/+11
| | | | | | | | | | delstr from initgc() into collect(). initgc() isn't called unless the user explicitly imports gc, so can be used only for initialization of user-visible module features; delstr needs to be initialized for proper internal operation, whether or not gc is explicitly imported. Bugfix candidate? I don't know whether the new bug was backported to 2.2 already.
* SF bug #715145: unittest.py still uses != in failUnlessEqualRaymond Hettinger2003-04-042-2/+6
|
* Add Tim's gc boom test to the test suite.Jeremy Hylton2003-04-041-0/+19
|
* Fix Tim's boom example.Jeremy Hylton2003-04-041-20/+54
| | | | | move_finalizers() moves every object from unreachable to collectable or finalizers, unless the object is deallocated first.
* Use fcntl() to put the audio device *back* into blocking mode afterGreg Ward2003-04-041-0/+9
| | | | | opening it in non-blocking mode. Both Guido and David Hammerton have reported that this fixes their problems with ossaudiodev -- hooray!
* Add get_referrents() helper function.Jeremy Hylton2003-04-031-1/+1
|
* Add get_referrents() helper function.Jeremy Hylton2003-04-031-1/+32
|
* Revert Patch #670715: iconv support.Martin v. Löwis2003-04-038-892/+2
|
* Fix description: u"%c" % 0xffffffff returned a ValueError not a TypeError.Walter Dörwald2003-04-021-1/+1
|
* Change formatchar(), so that u"%c" % 0xffffffff now raisesWalter Dörwald2003-04-023-4/+5
| | | | | an OverflowError instead of a TypeError to be consistent with "%c" % 256. See SF patch #710127.
* Fix a commentBarry Warsaw2003-04-021-1/+1
|
* Added a note about scripting support and the IDE builtin help.Jack Jansen2003-04-011-0/+6
|
* The minimal scripting example now actually works.Jack Jansen2003-04-011-8/+10
|
* Sigh... The get() and set() commands are not declared in the aete forJack Jansen2003-04-011-9/+18
| | | | | | the Standard_Suite, but various other suites do expect it (the Finder implements get() without declaring it itself). It is probably another case of OSA magic. Adding them to the global base class.
* Regenerated with property names with _Prop_ prepended.Jack Jansen2003-04-0153-2860/+1697
|
* Properties (like enums) are not in the global namespace but only validJack Jansen2003-04-011-23/+23
| | | | | | | | | within a certain context. Give them an _Prop_ prefix, so they don't accidentally obscure an element from another suite (as happened with the Finder). Comparisons I'm not sure about, so I left them as global names. Also got rid of the lists if declarations, they serve no useful purpose.
* Turned the suite compiler into an object.Jack Jansen2003-04-011-254/+258
|
* - All messages are now dependent on the --verbose option.Jack Jansen2003-04-011-47/+85
| | | | | - Added a --dump option that doesn't generate the module but dumps the pretty-printed aete resource(s) on stdout.
* init_bsddb(): Added a few symbols that Greg forgot.Barry Warsaw2003-03-311-1/+4
|
* Remove duplicate test.Walter Dörwald2003-03-311-2/+2
|
* Fix PyString_Format() so that '%c' % u'a' returns u'a'Walter Dörwald2003-03-315-0/+18
| | | | | | | | instead of raising a TypeError. (From SF patch #710127) Add tests to verify this is fixed. Add various tests for '%c' % int.
* - add the "download_url" field to the pre-2.2.3 metadata compatibility noteFred Drake2003-03-311-26/+26
| | | | - fix some markup nits
* Fix typo.Walter Dörwald2003-03-311-1/+1
|
* SF patch #712367, get build working on AIXNeal Norwitz2003-03-313-3/+17
| | | | | | | configure change is necessary to pass "." to makexp_aix so that dynamic modules work setup change gets curses working
* Added a File->Generate OSA Suite command.Jack Jansen2003-03-311-0/+5
|
* Added 1-page introductions to creating GUIs in Python and the OSAJack Jansen2003-03-313-0/+108
| | | | interface.
* Fix symbol in grammar; this should fix some hyperlinking in the HTMLFred Drake2003-03-311-1/+1
| | | | version.
* Subclasses of ObjectSpecifier can now be packed and unpacked. This allowsJack Jansen2003-03-311-3/+20
| | | | | | you to say something like "talker.count(want=Address_Book.people)" in stead of having to manually create the aetypes.Type(Address_Book.people.want) OSA type.
* In TalkTo.send(), check that we have access to the window manager,Jack Jansen2003-03-311-1/+13
| | | | | and initialize the event loop (if not done previously) to work around a bug (IMHO) in MacOSX 10.2.