summaryrefslogtreecommitdiffstats
path: root/runtime/class_linker.cc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-06-17 14:14:36 -0700
committerMathieu Chartier <mathieuc@google.com>2015-06-17 14:14:36 -0700
commita3b9d4eda1ef0845f307891f349eaf752750ac16 (patch)
tree88eb594031c79a5a831155bcc529741e98568a8b /runtime/class_linker.cc
parentafe9e134a773242b142b0740383f085f08ec1cba (diff)
downloadart-a3b9d4eda1ef0845f307891f349eaf752750ac16.zip
art-a3b9d4eda1ef0845f307891f349eaf752750ac16.tar.gz
art-a3b9d4eda1ef0845f307891f349eaf752750ac16.tar.bz2
Add missing EndAssertNoThreadSuspension
Bug: 21872507 Change-Id: I20f9920e4a12511ce498c252bca955d82a4f4102
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r--runtime/class_linker.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 91812e7..31749bf 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -4901,6 +4901,9 @@ bool ClassLinker::LinkInterfaceMethods(Thread* self, Handle<mirror::Class> klass
if (interface_name_comparator.HasSameNameAndSignature(
vtable_method_for_name_comparison)) {
if (!vtable_method->IsAbstract() && !vtable_method->IsPublic()) {
+ // Must do EndAssertNoThreadSuspension before throw since the throw can cause
+ // allocations.
+ self->EndAssertNoThreadSuspension(old_cause);
ThrowIllegalAccessError(klass.Get(),
"Method '%s' implementing interface method '%s' is not public",
PrettyMethod(vtable_method).c_str(), PrettyMethod(interface_method).c_str());