소스 검색

prevent deadlock

David Rose 20 년 전
부모
커밋
b9f61db573
1개의 변경된 파일7개의 추가작업 그리고 3개의 파일을 삭제
  1. 7 3
      panda/src/putil/deferredDeletor.cxx

+ 7 - 3
panda/src/putil/deferredDeletor.cxx

@@ -49,12 +49,16 @@ delete_object(DeleteFunc *func, void *ptr) {
 ////////////////////////////////////////////////////////////////////
 void DeferredDeletor::
 flush() {
-  MutexHolder holder(_lock);
+  Tokens new_tokens;
+  {
+    MutexHolder holder(_lock);
+    _tokens.swap(new_tokens);
+  }
+
   Tokens::iterator ti;
-  for (ti = _tokens.begin(); ti != _tokens.end(); ++ti) {
+  for (ti = new_tokens.begin(); ti != new_tokens.end(); ++ti) {
     (*ti).do_delete();
   }
-  _tokens.clear();
 }
 
 ////////////////////////////////////////////////////////////////////