Index: runtime/vm/dart_api_state.h |
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h |
index 12f9331c4a3b558ed7fdaa036b099599ee980cdf..b222449b79960f9592741a0e203fcdaf2118e7c8 100644 |
--- a/runtime/vm/dart_api_state.h |
+++ b/runtime/vm/dart_api_state.h |
@@ -25,25 +25,6 @@ |
namespace dart { |
-class FinalizablePersistentHandle; |
-typedef MallocGrowableArray<FinalizablePersistentHandle*> FinalizationQueue; |
- |
- |
-class BackgroundFinalizer : public ThreadPool::Task { |
- public: |
- BackgroundFinalizer(Isolate* isolate, FinalizationQueue* queue); |
- virtual ~BackgroundFinalizer() {} |
- |
- void Run(); |
- |
- private: |
- Isolate* isolate_; |
- FinalizationQueue* queue_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(BackgroundFinalizer); |
-}; |
- |
- |
// Implementation of Zone support for very fast allocation of small chunks |
// of memory. The chunks cannot be deallocated individually, but instead |
// zones support deallocating all chunks in one fast operation when the |
@@ -244,18 +225,9 @@ class FinalizablePersistentHandle { |
} |
// Called when the referent becomes unreachable. |
- void UpdateUnreachable(Isolate* isolate, FinalizationQueue* queue) { |
- if (is_queued_for_finalization()) { |
- return; |
- } |
+ void UpdateUnreachable(Isolate* isolate) { |
EnsureFreeExternal(isolate); |
- if (queue == NULL) { |
- Finalize(isolate, this); |
- } else { |
- MarkForFinalization(); |
- queue->Add(this); |
- set_is_queued_for_finalization(true); |
- } |
+ Finalize(isolate, this); |
} |
// Called when the referent has moved, potentially between generations. |
@@ -278,9 +250,8 @@ class FinalizablePersistentHandle { |
private: |
enum { |
kExternalNewSpaceBit = 0, |
- kQueuedForFinalizationBit = 1, |
- kExternalSizeBits = 2, |
- kExternalSizeBitsSize = (kBitsPerWord - 2), |
+ kExternalSizeBits = 1, |
+ kExternalSizeBitsSize = (kBitsPerWord - 1), |
}; |
// This part of external_data_ is the number of externally allocated bytes. |
@@ -292,8 +263,6 @@ class FinalizablePersistentHandle { |
// space and UpdateRelocated has not yet detected any promotion. |
class ExternalNewSpaceBit |
: public BitField<uword, bool, kExternalNewSpaceBit, 1> {}; |
- class QueuedForFinalizationBit |
- : public BitField<uword, bool, kQueuedForFinalizationBit, 1> {}; |
friend class FinalizablePersistentHandles; |
@@ -324,11 +293,6 @@ class FinalizablePersistentHandle { |
callback_ = NULL; |
} |
- void MarkForFinalization() { |
- raw_ = Object::null(); |
- ASSERT(callback_ != NULL); |
- } |
- |
void set_raw(RawObject* raw) { raw_ = raw; } |
void set_raw(const LocalHandle& ref) { raw_ = ref.raw(); } |
void set_raw(const Object& object) { raw_ = object.raw(); } |
@@ -346,13 +310,6 @@ class FinalizablePersistentHandle { |
ExternalSizeInWordsBits::update(size_in_words, external_data_); |
} |
- bool is_queued_for_finalization() const { |
- return QueuedForFinalizationBit::decode(external_data_); |
- } |
- void set_is_queued_for_finalization(bool value) { |
- external_data_ = QueuedForFinalizationBit::update(value, external_data_); |
- } |
- |
bool IsSetNewSpaceBit() const { |
return ExternalNewSpaceBit::decode(external_data_); |
} |
@@ -372,8 +329,6 @@ class FinalizablePersistentHandle { |
: Heap::kOld; |
} |
- friend class BackgroundFinalizer; |
- |
RawObject* raw_; |
void* peer_; |
uword external_data_; |
@@ -546,12 +501,9 @@ class FinalizablePersistentHandles |
: Handles<kFinalizablePersistentHandleSizeInWords, |
kFinalizablePersistentHandlesPerChunk, |
kOffsetOfRawPtrInFinalizablePersistentHandle>(), |
- free_list_(NULL), |
- mutex_(new Mutex()) {} |
+ free_list_(NULL) {} |
~FinalizablePersistentHandles() { |
free_list_ = NULL; |
- delete mutex_; |
- mutex_ = NULL; |
} |
// Accessors. |
@@ -577,14 +529,11 @@ class FinalizablePersistentHandles |
// by calling FreeHandle. |
FinalizablePersistentHandle* AllocateHandle() { |
FinalizablePersistentHandle* handle; |
- { |
- MutexLocker ml(mutex_); |
- if (free_list_ != NULL) { |
- handle = free_list_; |
- free_list_ = handle->Next(); |
- handle->set_raw(Object::null()); |
- return handle; |
- } |
+ if (free_list_ != NULL) { |
+ handle = free_list_; |
+ free_list_ = handle->Next(); |
+ handle->set_raw(Object::null()); |
+ return handle; |
} |
handle = |
@@ -594,19 +543,16 @@ class FinalizablePersistentHandles |
} |
void FreeHandle(FinalizablePersistentHandle* handle) { |
- MutexLocker ml(mutex_); |
handle->FreeHandle(free_list()); |
set_free_list(handle); |
} |
// Validate if passed in handle is a Persistent Handle. |
bool IsValidHandle(Dart_WeakPersistentHandle object) const { |
- MutexLocker ml(mutex_); |
return IsValidScopedHandle(reinterpret_cast<uword>(object)); |
} |
bool IsFreeHandle(Dart_WeakPersistentHandle object) const { |
- MutexLocker ml(mutex_); |
FinalizablePersistentHandle* handle = free_list_; |
while (handle != NULL) { |
if (handle == reinterpret_cast<FinalizablePersistentHandle*>(object)) { |
@@ -622,7 +568,6 @@ class FinalizablePersistentHandles |
private: |
FinalizablePersistentHandle* free_list_; |
- Mutex* mutex_; |
DISALLOW_COPY_AND_ASSIGN(FinalizablePersistentHandles); |
}; |
@@ -861,7 +806,6 @@ inline FinalizablePersistentHandle* FinalizablePersistentHandle::New( |
ref->set_raw(object); |
ref->set_peer(peer); |
ref->set_callback(callback); |
- ref->set_is_queued_for_finalization(false); |
// This may trigger GC, so it must be called last. |
ref->SetExternalSize(external_size, isolate); |
return ref; |