Add mutex lock to CompilationUnit.

Change-Id: I2555dcc72ca8a765627b9267bfc32ad97315472f
diff --git a/src/compiler_llvm/compilation_unit.h b/src/compiler_llvm/compilation_unit.h
index d050820..2f98521 100644
--- a/src/compiler_llvm/compilation_unit.h
+++ b/src/compiler_llvm/compilation_unit.h
@@ -17,6 +17,7 @@
 #ifndef ART_SRC_COMPILER_LLVM_COMPILATION_UNIT_H_
 #define ART_SRC_COMPILER_LLVM_COMPILATION_UNIT_H_
 
+#include "../mutex.h"
 #include "elf_image.h"
 #include "globals.h"
 #include "instruction_set.h"
@@ -55,26 +56,33 @@
   }
 
   InstructionSet GetInstructionSet() const {
+    cunit_lock_.AssertHeld();
     return insn_set_;
   }
 
   llvm::LLVMContext* GetLLVMContext() const {
+    cunit_lock_.AssertHeld();
     return context_.get();
   }
 
   llvm::Module* GetModule() const {
+    cunit_lock_.AssertHeld();
     return module_;
   }
 
   IRBuilder* GetIRBuilder() const {
+    cunit_lock_.AssertHeld();
     return irb_.get();
   }
 
   ElfImage GetElfImage() const {
+    MutexLock GUARD(cunit_lock_);
+    CHECK_GT(elf_image_.size(), 0u);
     return ElfImage(elf_image_);
   }
 
   uint16_t AcquireUniqueElfFuncIndex() {
+    cunit_lock_.AssertHeld();
     CHECK(num_elf_funcs_ < UINT16_MAX);
     return num_elf_funcs_++;
   }
@@ -84,14 +92,17 @@
   bool Materialize();
 
   bool IsMaterialized() const {
+    MutexLock GUARD(cunit_lock_);
     return (context_.get() == NULL);
   }
 
   bool IsMaterializeThresholdReached() const {
+    MutexLock GUARD(cunit_lock_);
     return (mem_usage_ > 100000000u); // (threshold: 100 MB)
   }
 
   void AddMemUsageApproximation(size_t usage) {
+    MutexLock GUARD(cunit_lock_);
     mem_usage_ += usage;
   }
 
@@ -99,6 +110,8 @@
 
   void UpdateFrameSizeInBytes(const llvm::Function* func, size_t frame_size_in_bytes);
 
+  mutable Mutex cunit_lock_;
+
  private:
   InstructionSet insn_set_;
   const size_t elf_idx_;