Chromium Code Reviews| Index: runtime/vm/dart_api_impl.cc |
| =================================================================== |
| --- runtime/vm/dart_api_impl.cc (revision 34115) |
| +++ runtime/vm/dart_api_impl.cc (working copy) |
| @@ -371,6 +371,27 @@ |
| } |
| +void FinalizablePersistentHandle::Finalize(Isolate* isolate, |
| + FinalizablePersistentHandle* handle, |
| + bool is_prologue_weak) { |
| + Dart_WeakPersistentHandleFinalizer callback = handle->callback(); |
| + if (callback != NULL) { |
|
Ivan Posva
2014/03/19 23:08:14
How can the callback be NULL, I thought it was a r
siva
2014/03/20 20:05:32
good point changed that to an assert
ASSERT(callba
|
| + void* peer = handle->peer(); |
| + Dart_WeakPersistentHandle object = is_prologue_weak ? |
| + handle->apiPrologueHandle() : |
| + handle->apiHandle(); |
| + (*callback)(isolate->init_callback_data(), object, peer); |
| + } |
| + ApiState* state = isolate->api_state(); |
| + ASSERT(state != NULL); |
| + if (is_prologue_weak) { |
| + state->prologue_weak_persistent_handles().FreeHandle(handle); |
| + } else { |
| + state->weak_persistent_handles().FreeHandle(handle); |
| + } |
| +} |
| + |
| + |
| // --- Handles --- |
| DART_EXPORT bool Dart_IsError(Dart_Handle handle) { |