Commit 909d1d56024ce10dbb56b313fd0d402894c18049
1 parent
7559934b
another bug description
git-svn-id: svn+q:///qpdf/trunk@974 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing
1 changed file
with
44 additions
and
0 deletions
TODO
| 1 | +Bug | ||
| 2 | +=== | ||
| 3 | + | ||
| 4 | + * There is a memory leak that happens whenever object A refers to | ||
| 5 | + object B which refers back to object A. We have the following | ||
| 6 | + pattern: | ||
| 7 | + | ||
| 8 | + #include "PointerHolder.hh" | ||
| 9 | + | ||
| 10 | + class A | ||
| 11 | + { | ||
| 12 | + public: | ||
| 13 | + PointerHolder<A> a; | ||
| 14 | + }; | ||
| 15 | + | ||
| 16 | + int main() | ||
| 17 | + { | ||
| 18 | + A a1; | ||
| 19 | + a1.a = new A(); | ||
| 20 | + a1.a.getPointer()->a = new A(); | ||
| 21 | + a1.a.getPointer()->a.getPointer()->a = a1.a; | ||
| 22 | + return 0; | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + In order to fix this, we have to explicitly break circular | ||
| 26 | + references, but we have to do this at a time that doesn't | ||
| 27 | + completely destroy performance. | ||
| 28 | + | ||
| 29 | + To debug, configure with | ||
| 30 | + | ||
| 31 | + ./configure --disable-shared --disable-test-compare-images \ | ||
| 32 | + CFLAGS=-g CXXFLAGS=-g | ||
| 33 | + | ||
| 34 | + Current code causes test failures. linearize segfaults on | ||
| 35 | + hybrid-xref.pdf, and the test suite fails in various places. Maybe | ||
| 36 | + because we don't do any kind of loop detection? | ||
| 37 | + | ||
| 38 | + Use valgrind --leak-check=full to see leak details. | ||
| 39 | + | ||
| 40 | + The file memory-leak.pdf is a minimal case that shows the problem. | ||
| 41 | + | ||
| 42 | + Files in trace having tracing to show which objects haven't been | ||
| 43 | + allocated. | ||
| 44 | + | ||
| 1 | Next | 45 | Next |
| 2 | ==== | 46 | ==== |
| 3 | 47 |