From 605fe24d07062a038c8332a4d98f47052e9cee6a Mon Sep 17 00:00:00 2001 From: Chang Xing Date: Thu, 20 Jul 2017 15:57:21 -0700 Subject: Implemented Nested Transaction Transaction can be created recursively and every transaction knows which class it is created for. The goal of implementing nested transaction is to let every class initialization (especially execution of class initializer) associates with one transaction which provides the ability to track whether field accesses are valid. To achieve this goal, we implemented a subclass for ClassLinker called AotClassLinker, which will be instantiated instead of ClassLinker under AOT compiler. All invocations of InitializeClass happens at AOT compiler will be wrapped with creating and destorying transactions. Transactions will be paused when rollbacking, otherwise the memory will not be rollbacked properly. The use the transaction is changed and all usage are updated, corresponding with native tests mentioning transaction, including transaction_test and unstarted_runtime_test. The validation rules will be implemented and explained in another CL. Test: make test-art-host -j64 Change-Id: If53d3ee3231c337a9ea917f5b885c173917765de --- compiler/driver/compiler_driver.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'compiler/driver/compiler_driver.cc') diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index a932e381b6..7e31ff0024 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -2359,7 +2359,7 @@ class InitializeClassVisitor : public CompilationVisitor { *file_log << exception->Dump() << "\n"; } soa.Self()->ClearException(); - runtime->RollbackAndExitTransactionMode(); + runtime->RollbackAllTransactions(); CHECK_EQ(old_status, klass->GetStatus()) << "Previous class status not restored"; } else if (is_boot_image) { // For boot image, we want to put the updated status in the oat class since we can't -- cgit v1.2.3-59-g8ed1b