17 ASSERT(active_list_ ==
nullptr);
20 while (free_list_ !=
nullptr) {
21 Thread* thread = free_list_;
22 free_list_ = thread->next_;
28Thread* ThreadRegistry::GetFreeThreadLocked(
bool is_vm_isolate) {
30 Thread* thread = GetFromFreelistLocked(is_vm_isolate);
33 AddToActiveListLocked(thread);
37void ThreadRegistry::ReturnThreadLocked(Thread* thread) {
40 RemoveFromActiveListLocked(thread);
41 ReturnToFreelistLocked(thread);
49 Thread* thread = active_list_;
50 while (thread !=
nullptr) {
58 thread = thread->next_;
65 Thread* thread = active_list_;
66 while (thread !=
nullptr) {
68 thread = thread->next_;
74 Thread* thread = active_list_;
75 while (thread !=
nullptr) {
79 thread = thread->next_;
85 Thread* thread = active_list_;
86 while (thread !=
nullptr) {
88 thread->MarkingStackAcquire();
89 thread->DeferredMarkingStackAcquire();
91 thread = thread->next_;
97 Thread* thread = active_list_;
98 while (thread !=
nullptr) {
100 thread->MarkingStackRelease();
101 thread->DeferredMarkingStackRelease();
104 thread = thread->next_;
110 Thread* thread = active_list_;
111 while (thread !=
nullptr) {
113 thread->MarkingStackFlush();
114 thread->DeferredMarkingStackFlush();
117 thread = thread->next_;
121void ThreadRegistry::AddToActiveListLocked(
Thread* thread) {
122 ASSERT(thread !=
nullptr);
124 thread->next_ = active_list_;
125 active_list_ = thread;
129void ThreadRegistry::RemoveFromActiveListLocked(Thread* thread) {
130 ASSERT(thread !=
nullptr);
133 Thread* current = active_list_;
134 while (current !=
nullptr) {
135 if (current == thread) {
136 if (
prev ==
nullptr) {
137 active_list_ = current->next_;
139 prev->next_ = current->next_;
145 current = current->next_;
149Thread* ThreadRegistry::GetFromFreelistLocked(
bool is_vm_isolate) {
153 if (free_list_ ==
nullptr) {
154 thread =
new Thread(is_vm_isolate);
157 free_list_ = thread->next_;
162void ThreadRegistry::ReturnToFreelistLocked(Thread* thread) {
163 ASSERT(thread !=
nullptr);
164 ASSERT(thread->os_thread() ==
nullptr);
165 ASSERT(thread->isolate_ ==
nullptr);
166 ASSERT(thread->isolate_group_ ==
nullptr);
167 ASSERT(thread->field_table_values_ ==
nullptr);
170 thread->next_ = free_list_;
static float prev(float f)
T fetch_add(T arg, std::memory_order order=std::memory_order_relaxed)
T fetch_sub(T arg, std::memory_order order=std::memory_order_relaxed)
void ReleaseStoreBuffers()
void FlushMarkingStacks()
void VisitObjectPointers(IsolateGroup *isolate_group_of_interest, ObjectPointerVisitor *visitor, ValidationPolicy validate_frames)
Monitor * threads_lock() const
void AcquireMarkingStacks()
void ReleaseMarkingStacks()
void ForEachThread(std::function< void(Thread *thread)> callback)
ApiLocalScope * api_top_scope() const
void VisitObjectPointers(ObjectPointerVisitor *visitor, ValidationPolicy validate_frames)
void ReleaseStoreBuffer()
bool IsDartMutatorThread() const
bool BypassSafepoints() const
IsolateGroup * isolate_group() const
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback