libmojo: Re-apply all the ARC mods am: 3033949ebb am: 1f81ce9e4f
am: d8466514db
Change-Id: I1b5453fb3e59d66ab5f4a119bd4337a30363004d
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 @@
}
// 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 @@
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++;
+ // 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);
}
- 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);
return true;
}
@@ -227,11 +230,15 @@
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 @@
{% 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 %}