Home | History | Annotate | Download | only in runtime
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "locks.h"
     18 
     19 #include "base/mutex.h"
     20 
     21 namespace art {
     22 
     23 Mutex* Locks::abort_lock_ = NULL;
     24 Mutex* Locks::breakpoint_lock_ = NULL;
     25 ReaderWriterMutex* Locks::classlinker_classes_lock_ = NULL;
     26 ReaderWriterMutex* Locks::heap_bitmap_lock_ = NULL;
     27 Mutex* Locks::logging_lock_ = NULL;
     28 ReaderWriterMutex* Locks::mutator_lock_ = NULL;
     29 Mutex* Locks::runtime_shutdown_lock_ = NULL;
     30 Mutex* Locks::thread_list_lock_ = NULL;
     31 Mutex* Locks::thread_suspend_count_lock_ = NULL;
     32 Mutex* Locks::trace_lock_ = NULL;
     33 Mutex* Locks::unexpected_signal_lock_ = NULL;
     34 
     35 void Locks::Init() {
     36   if (logging_lock_ != NULL) {
     37     // Already initialized.
     38     DCHECK(abort_lock_ != NULL);
     39     DCHECK(breakpoint_lock_ != NULL);
     40     DCHECK(classlinker_classes_lock_ != NULL);
     41     DCHECK(heap_bitmap_lock_ != NULL);
     42     DCHECK(logging_lock_ != NULL);
     43     DCHECK(mutator_lock_ != NULL);
     44     DCHECK(thread_list_lock_ != NULL);
     45     DCHECK(thread_suspend_count_lock_ != NULL);
     46     DCHECK(trace_lock_ != NULL);
     47     DCHECK(unexpected_signal_lock_ != NULL);
     48   } else {
     49     logging_lock_ = new Mutex("logging lock", kLoggingLock, true);
     50     abort_lock_ = new Mutex("abort lock", kAbortLock, true);
     51 
     52     DCHECK(breakpoint_lock_ == NULL);
     53     breakpoint_lock_ = new Mutex("breakpoint lock", kBreakpointLock);
     54     DCHECK(classlinker_classes_lock_ == NULL);
     55     classlinker_classes_lock_ = new ReaderWriterMutex("ClassLinker classes lock",
     56                                                       kClassLinkerClassesLock);
     57     DCHECK(heap_bitmap_lock_ == NULL);
     58     heap_bitmap_lock_ = new ReaderWriterMutex("heap bitmap lock", kHeapBitmapLock);
     59     DCHECK(mutator_lock_ == NULL);
     60     mutator_lock_ = new ReaderWriterMutex("mutator lock", kMutatorLock);
     61     DCHECK(runtime_shutdown_lock_ == NULL);
     62     runtime_shutdown_lock_ = new Mutex("runtime shutdown lock", kRuntimeShutdownLock);
     63     DCHECK(thread_list_lock_ == NULL);
     64     thread_list_lock_ = new Mutex("thread list lock", kThreadListLock);
     65     DCHECK(thread_suspend_count_lock_ == NULL);
     66     thread_suspend_count_lock_ = new Mutex("thread suspend count lock", kThreadSuspendCountLock);
     67     DCHECK(trace_lock_ == NULL);
     68     trace_lock_ = new Mutex("trace lock", kTraceLock);
     69     DCHECK(unexpected_signal_lock_ == NULL);
     70     unexpected_signal_lock_ = new Mutex("unexpected signal lock", kUnexpectedSignalLock, true);
     71   }
     72 }
     73 
     74 }  // namespace art
     75