From 3033949ebb841470a2cb165e8c50c7b413b0417c Mon Sep 17 00:00:00 2001 From: Luis Hector Chavez Date: Mon, 18 Dec 2017 09:58:43 -0800 Subject: libmojo: Re-apply all the ARC mods This change re-adds all the ARC mods that were accidentally dropped during the uprev. Bug: 70730080 Test: diff HEAD^ # Shows no TODOs being dropped. Change-Id: Iaf5481dce46535952ac0e5d9a8accfb28fb2a566 --- base/android/jni_android.cc | 11 +++++- .../src/org/chromium/mojo/bindings/RouterImpl.java | 41 +++++++++++++--------- .../java_templates/interface_definition.tmpl | 7 +++- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/base/android/jni_android.cc b/base/android/jni_android.cc index 56dc5c2..abc37d5 100644 --- a/base/android/jni_android.cc +++ b/base/android/jni_android.cc @@ -240,7 +240,16 @@ void CheckException(JNIEnv* env) { } // Now, feel good about it and die. - LOG(FATAL) << "Please include Java exception stack in crash report"; + // TODO(lhchavez): Remove this hack. See b/28814913 for details. + // We're using BuildInfo's java_exception_info() instead of storing the + // exception info a few lines above to avoid extra copies. It will be + // truncated to 1024 bytes anyways. + const char* exception_string = + base::android::BuildInfo::GetInstance()->java_exception_info(); + if (exception_string) + LOG(FATAL) << exception_string; + else + LOG(FATAL) << "Unhandled exception"; } std::string GetJavaExceptionInfo(JNIEnv* env, jthrowable java_throwable) { diff --git a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/RouterImpl.java b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/RouterImpl.java index a278cc5..aebc9e2 100644 --- a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/RouterImpl.java +++ b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/RouterImpl.java @@ -171,20 +171,23 @@ public class RouterImpl implements Router { assert messageWithHeader.getHeader().hasFlag(MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG); // Compute a request id for being able to route the response. - long requestId = mNextRequestId++; - // Reserve 0 in case we want it to convey special meaning in the future. - if (requestId == 0) { - requestId = mNextRequestId++; - } - if (mResponders.containsKey(requestId)) { - throw new IllegalStateException("Unable to find a new request identifier."); - } - messageWithHeader.setRequestId(requestId); - if (!mConnector.accept(messageWithHeader)) { - return false; + // TODO(lhchavez): Remove this hack. See b/28986534 for details. + synchronized (mResponders) { + long requestId = mNextRequestId++; + // Reserve 0 in case we want it to convey special meaning in the future. + if (requestId == 0) { + requestId = mNextRequestId++; + } + if (mResponders.containsKey(requestId)) { + throw new IllegalStateException("Unable to find a new request identifier."); + } + messageWithHeader.setRequestId(requestId); + if (!mConnector.accept(messageWithHeader)) { + return false; + } + // Only keep the responder is the message has been accepted. + mResponders.put(requestId, responder); } - // Only keep the responder is the message has been accepted. - mResponders.put(requestId, responder); return true; } @@ -227,11 +230,15 @@ public class RouterImpl implements Router { return false; } else if (header.hasFlag(MessageHeader.MESSAGE_IS_RESPONSE_FLAG)) { long requestId = header.getRequestId(); - MessageReceiver responder = mResponders.get(requestId); - if (responder == null) { - return false; + MessageReceiver responder; + // TODO(lhchavez): Remove this hack. See b/28986534 for details. + synchronized (mResponders) { + responder = mResponders.get(requestId); + if (responder == null) { + return false; + } + mResponders.remove(requestId); } - mResponders.remove(requestId); return responder.accept(message); } else { if (mIncomingMessageReceiver != null) { diff --git a/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl index c7dcbbc..ba31186 100644 --- a/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl +++ b/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl @@ -113,7 +113,12 @@ try { {% else %} {{request_struct|name}}.deserialize(messageWithHeader.getPayload()); {% endif %} - getImpl().{{method|name}}({{run_callback('data', method.parameters)}}{% if with_response %}{% if method.parameters %}, {% endif %}new {{response_struct|name}}ProxyToResponder(getCore(), receiver, header.getRequestId()){% endif %}); + try { + getImpl().{{method|name}}({{run_callback('data', method.parameters)}}{% if with_response %}{% if method.parameters %}, {% endif %}new {{response_struct|name}}ProxyToResponder(getCore(), receiver, header.getRequestId()){% endif %}); + } catch (RuntimeException e) { + // TODO(lhchavez): Remove this hack. See b/28814913 for details. + android.util.Log.wtf("{{namespace}}.{{interface.name}}", "Uncaught runtime exception", e); + } return true; } {% endif %} -- cgit v1.2.3