Fix four memory leaks uncovered by valgrinding gm tests.
All are triggered by PDF code.
Two are missing unref's on SkData.
One is a missing unref on a SkAdvancedTypefaceMetrics.
The last is missing destruction of SkClipStack internal state.
BUG=526
Review URL: https://codereview.appspot.com/5824049
git-svn-id: http://skia.googlecode.com/svn/trunk@3386 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkClipStack.cpp b/src/core/SkClipStack.cpp
index cfa9482..567fd7e 100644
--- a/src/core/SkClipStack.cpp
+++ b/src/core/SkClipStack.cpp
@@ -82,6 +82,10 @@
*this = b;
}
+SkClipStack::~SkClipStack() {
+ reset();
+}
+
SkClipStack& SkClipStack::operator=(const SkClipStack& b) {
if (this == &b) {
return *this;
@@ -119,9 +123,13 @@
}
void SkClipStack::reset() {
- // don't have a reset() on SkDeque, so fake it here
- fDeque.~SkDeque();
- new (&fDeque) SkDeque(sizeof(Rec));
+ // We used a placement new for each object in fDeque, so we're responsible
+ // for calling the destructor on each of them as well.
+ while (!fDeque.empty()) {
+ Rec* rec = (Rec*)fDeque.back();
+ rec->~Rec();
+ fDeque.pop_back();
+ }
fSaveCount = 0;
}