aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Hector Chavez <lhchavez@google.com>2017-12-18 09:58:43 -0800
committerLuis Hector Chavez <lhchavez@google.com>2017-12-18 09:58:43 -0800
commit3033949ebb841470a2cb165e8c50c7b413b0417c (patch)
treeb4c173966f5319107336a502d4e67b67f397457f
parent0411add1e14cc2dc041f5f1776f05a8c4b787d73 (diff)
downloadlibmojo-3033949ebb841470a2cb165e8c50c7b413b0417c.tar.gz
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
-rw-r--r--base/android/jni_android.cc11
-rw-r--r--mojo/public/java/bindings/src/org/chromium/mojo/bindings/RouterImpl.java41
-rw-r--r--mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl7
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 %}