- 27 May, 2015 4 commits
-
-
Kevin Modzelewski authored
Without this, one could use freed objects without issues, until something else was allocated in that space. And even then, it would still be a valid object. So, in debug mode overwrite the data with garbage to try to surface these issues. This exposed an issue with our "nonheap roots" handling, where we weren't scanning all of the memory that they pointed to. This is mostly fine, but there are some cases (time.gmtime) where gc-allocated memory would be stored in these objects. So, now you have to register the size of the object, and the memory range will be scanned conservatively.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Add a new allocation type CONSERVATIVE_PYTHON for extensions objects, for which we don't have heap maps, but should still have Python finalization semantics (ie destructors and weakrefs). Previously we were just marking them as CONSERVATIVE and skipping them during the sweep phase, and not running destructors or handling weakrefs. It's a bit tricky to figure out when to mark an allocation as conservative vs conservative-python; the approach in this commit is to mark all capi-originated allocations as conservative, and then when we call PyObject_Init or PyObject_InitVar, switch them from conservative to conservative-python. I think this is more expensive but safer than assuming that certain apis will always/never be used as object memory. Unfortunately there are quite a few extension classes that request a custom tp_dealloc, and this commit just keeps the old (bad) behavior of ignoring those. I tried to verify as many as I could and they all seem benign, but it will be nice to have real destructor support :)
-
Kevin Modzelewski authored
-
- 26 May, 2015 15 commits
-
-
Kevin Modzelewski authored
Make our pyc handling more robust
-
Kevin Modzelewski authored
Add __cmp__ and dictproxy
-
Kevin Modzelewski authored
and add a pyc "stress test". I think these issues are the source of our sporadic ci failures; it makes sense based on where things fail (usually in the parser), and because it's stateful (if you already have pycs generated you don't run into the issue) and because it only happens in multithreaded mode. changes: - read the entire file at once, then do checks - add a simple xor checksum in addition to the expected length
-
Kevin Modzelewski authored
add libunwind_patch for binary search
-
Kevin Modzelewski authored
StatTimer comparisons
-
Marius Wachtler authored
-
Marius Wachtler authored
-
Chris Toshok authored
-
Chris Toshok authored
-
Kevin Modzelewski authored
Add pyexpat support
-
Kevin Modzelewski authored
Some minor merge conflicts due to duplication with #544.
-
Kevin Modzelewski authored
Faster version of attrwrapper.clear()
-
Kevin Modzelewski authored
implement long.__pos__
-
Kevin Modzelewski authored
Add a bunch of capi and fix a bug inside PyNumber_Int (was throwing a c++ exception)
-
Kevin Modzelewski authored
It's no longer being used, and isn't safe to use any more since it's not invalidated the times it needs to be.
-
- 25 May, 2015 4 commits
-
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Misc stuff
-
Kevin Modzelewski authored
Generators: Support explicit StopIteration raising.
-
Marius Wachtler authored
Before this patch we couldn't run 'list(G())' if G contained a explicit raise StopIteration statement. This also adds support for custom StopIteration subclasses.
-
- 24 May, 2015 1 commit
-
-
Marius Wachtler authored
(was throwing a c++ exception)
-
- 22 May, 2015 16 commits
-
-
Kevin Modzelewski authored
unwinder
-
Michael Arntzenius authored
-
Marius Wachtler authored
-
Marius Wachtler authored
-
Marius Wachtler authored
-
Michael Arntzenius authored
-
Michael Arntzenius authored
-
Michael Arntzenius authored
-
Michael Arntzenius authored
The signal-blocking is used to prevent libunwind from being entered recursively, if a signal handler invokes libunwind. We don't call libunwind from signal handlers, so this is not a problem for us. The conservative checks just make crashes behave more nicely. They have a small but measurable performance impact. We enable them in debug mode and disable them for release mode.
-
Michael Arntzenius authored
-
Michael Arntzenius authored
We also modify .gitmodules so that our patches to libunwind/ don't make git think the tree is dirty.
-
Michael Arntzenius authored
-
Michael Arntzenius authored
-
Michael Arntzenius authored
-
Michael Arntzenius authored
-
Michael Arntzenius authored
-