Index: runtime/vm/message_handler.cc |
diff --git a/runtime/vm/message_handler.cc b/runtime/vm/message_handler.cc |
index adfda8e2fd6c95786c7787fa6c0f5dab389c31f6..936e711684f145dbea421ca7b2e4397934458d69 100644 |
--- a/runtime/vm/message_handler.cc |
+++ b/runtime/vm/message_handler.cc |
@@ -332,6 +332,8 @@ void MessageHandler::TaskCallback() { |
MessageStatus status = kOK; |
bool run_end_callback = false; |
bool delete_me = false; |
+ EndCallback end_callback = NULL; |
+ CallbackData callback_data = NULL; |
{ |
// We will occasionally release and reacquire this monitor in this |
// function. Whenever we reacquire the monitor we *must* process |
@@ -415,6 +417,8 @@ void MessageHandler::TaskCallback() { |
} |
pool_ = NULL; |
// Decide if we have a callback before releasing the monitor. |
+ end_callback = end_callback_; |
+ callback_data = callback_data_; |
run_end_callback = end_callback_ != NULL; |
delete_me = delete_me_; |
} |
@@ -432,7 +436,8 @@ void MessageHandler::TaskCallback() { |
ASSERT(!delete_me || !run_end_callback); |
if (run_end_callback) { |
siva
2017/01/24 19:24:25
is run_end_callback still needed, it could just be
|
- end_callback_(callback_data_); |
+ ASSERT(end_callback != NULL); |
+ end_callback(callback_data); |
// The handler may have been deleted after this point. |
} |
if (delete_me) { |