| Index: src/messages.cc
|
| diff --git a/src/messages.cc b/src/messages.cc
|
| index 0cc82512c42842166fc24c92c8c1faf9e50b6d9c..abc25377851b5c4a76a404b5519edf75adc70226 100644
|
| --- a/src/messages.cc
|
| +++ b/src/messages.cc
|
| @@ -104,15 +104,6 @@ Handle<JSMessageObject> MessageHandler::MakeMessageObject(
|
| void MessageHandler::ReportMessage(Isolate* isolate,
|
| MessageLocation* loc,
|
| Handle<Object> message) {
|
| - // If we are in process of message reporting, just ignore all other requests
|
| - // to report a message as they are due to unhandled exceptions thrown in
|
| - // message callbacks.
|
| - if (isolate->in_exception_reporting()) {
|
| - PrintF("uncaught exception thrown while reporting\n");
|
| - return;
|
| - }
|
| - isolate->set_in_exception_reporting(true);
|
| -
|
| // We are calling into embedder's code which can throw exceptions.
|
| // Thus we need to save current exception state, reset it to the clean one
|
| // and ignore scheduled exceptions callbacks can throw.
|
| @@ -138,14 +129,16 @@ void MessageHandler::ReportMessage(Isolate* isolate,
|
| v8::MessageCallback callback =
|
| FUNCTION_CAST<v8::MessageCallback>(callback_obj->proxy());
|
| Handle<Object> callback_data(listener.get(1));
|
| - callback(api_message_obj, v8::Utils::ToLocal(callback_data));
|
| + {
|
| + // Do not allow exceptions to propagate.
|
| + v8::TryCatch tryCatch;
|
| + callback(api_message_obj, v8::Utils::ToLocal(callback_data));
|
| + }
|
| if (isolate->has_scheduled_exception()) {
|
| isolate->clear_scheduled_exception();
|
| }
|
| }
|
| }
|
| -
|
| - isolate->set_in_exception_reporting(false);
|
| }
|
|
|
|
|
|
|