Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: src/lazy/SkDiscardableMemoryPool.cpp

Issue 1017943003: Fix DiscardableMemoryPool::free race condition (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkDiscardableMemory.h" 8 #include "SkDiscardableMemory.h"
9 #include "SkDiscardableMemoryPool.h" 9 #include "SkDiscardableMemoryPool.h"
10 #include "SkImageGenerator.h" 10 #include "SkImageGenerator.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 PoolDiscardableMemory* dm = SkNEW_ARGS(PoolDiscardableMemory, 181 PoolDiscardableMemory* dm = SkNEW_ARGS(PoolDiscardableMemory,
182 (this, addr, bytes)); 182 (this, addr, bytes));
183 SkAutoMutexAcquire autoMutexAcquire(fMutex); 183 SkAutoMutexAcquire autoMutexAcquire(fMutex);
184 fList.addToHead(dm); 184 fList.addToHead(dm);
185 fUsed += bytes; 185 fUsed += bytes;
186 this->dumpDownTo(fBudget); 186 this->dumpDownTo(fBudget);
187 return dm; 187 return dm;
188 } 188 }
189 189
190 void DiscardableMemoryPool::free(PoolDiscardableMemory* dm) { 190 void DiscardableMemoryPool::free(PoolDiscardableMemory* dm) {
191 SkAutoMutexAcquire autoMutexAcquire(fMutex);
191 // This is called by dm's destructor. 192 // This is called by dm's destructor.
192 if (dm->fPointer != NULL) { 193 if (dm->fPointer != NULL) {
193 SkAutoMutexAcquire autoMutexAcquire(fMutex);
194 sk_free(dm->fPointer); 194 sk_free(dm->fPointer);
195 dm->fPointer = NULL; 195 dm->fPointer = NULL;
196 SkASSERT(fUsed >= dm->fBytes); 196 SkASSERT(fUsed >= dm->fBytes);
197 fUsed -= dm->fBytes; 197 fUsed -= dm->fBytes;
198 fList.remove(dm); 198 fList.remove(dm);
199 } else { 199 } else {
200 SkASSERT(!fList.isInList(dm)); 200 SkASSERT(!fList.isInList(dm));
201 } 201 }
202 } 202 }
203 203
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 return SkNEW_ARGS(DiscardableMemoryPool, (size, mutex)); 260 return SkNEW_ARGS(DiscardableMemoryPool, (size, mutex));
261 } 261 }
262 262
263 SK_DECLARE_STATIC_LAZY_PTR(SkDiscardableMemoryPool, global, create_global_pool); 263 SK_DECLARE_STATIC_LAZY_PTR(SkDiscardableMemoryPool, global, create_global_pool);
264 264
265 SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool() { 265 SkDiscardableMemoryPool* SkGetGlobalDiscardableMemoryPool() {
266 return global.get(); 266 return global.get();
267 } 267 }
268 268
269 //////////////////////////////////////////////////////////////////////////////// 269 ////////////////////////////////////////////////////////////////////////////////
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698