Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1234)

Unified Diff: runtime/vm/thread_registry.h

Issue 1541073002: Implement safepointing of threads (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix-typo Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/thread.cc ('k') | runtime/vm/thread_registry.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/thread_registry.h
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index 555e51368bd2f54e26875af2a91c50f77aeb3de3..c765a5d5ac23974b0083774046e9ecdb7de135c4 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.h
@@ -18,62 +18,32 @@ namespace dart {
class ThreadRegistry {
public:
ThreadRegistry()
- : monitor_(new Monitor()),
+ : threads_lock_(new Monitor()),
active_list_(NULL),
free_list_(NULL),
- mutator_thread_(NULL),
- in_rendezvous_(false),
- remaining_(0),
- round_(0) {}
-
+ mutator_thread_(NULL) {}
~ThreadRegistry();
- Thread* active_list() const { return active_list_; }
-
- // Bring all threads in this isolate to a safepoint. The caller is
- // expected to be implicitly at a safepoint. The threads will wait
- // until ResumeAllThreads is called. First participates in any
- // already pending rendezvous requested by another thread. Any
- // thread that tries to enter this isolate during rendezvous will
- // wait in RestoreStateTo. Nesting is not supported: the caller must
- // call ResumeAllThreads before making further calls to
- // SafepointThreads.
- void SafepointThreads();
-
- // Unblocks all threads participating in the rendezvous that was organized
- // by a prior call to SafepointThreads.
- // TODO(koda): Consider adding a scope helper to avoid omitting this call.
- void ResumeAllThreads();
-
- // Indicate that the current thread is at a safepoint, and offer to wait for
- // any pending rendezvous request (if none, returns immediately).
- void CheckSafepoint() {
- MonitorLocker ml(monitor_);
- CheckSafepointLocked();
- }
-
- bool AtSafepoint() const { return in_rendezvous_; }
- Thread* Schedule(Isolate* isolate, bool is_mutator, bool bypass_safepoint);
- void Unschedule(Thread* thread, bool is_mutator, bool bypass_safepoint);
void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames);
void PrepareForGC();
private:
- void AddThreadToActiveList(Thread* thread);
- void RemoveThreadFromActiveList(Thread* thread);
- Thread* GetThreadFromFreelist(Isolate* isolate);
- void ReturnThreadToFreelist(Thread* thread);
-
- // Note: Lock should be taken before this function is called.
- void CheckSafepointLocked();
-
- // Returns the number threads that are scheduled on this isolate.
- // Note: Lock should be taken before this function is called.
- intptr_t CountScheduledLocked();
-
- Monitor* monitor_; // All access is synchronized through this monitor.
+ Thread* active_list() const { return active_list_; }
+ Monitor* threads_lock() const { return threads_lock_; }
+
+ Thread* GetFreeThreadLocked(Isolate* isolate, bool is_mutator);
+ void ReturnThreadLocked(bool is_mutator, Thread* thread);
+ void AddToActiveListLocked(Thread* thread);
+ void RemoveFromActiveListLocked(Thread* thread);
+ Thread* GetFromFreelistLocked(Isolate* isolate);
+ void ReturnToFreelistLocked(Thread* thread);
+
+ // This monitor protects the threads list for an isolate, it is used whenever
+ // we need to iterate over threads (both active and free) in an isolate.
+ Monitor* threads_lock_;
Thread* active_list_; // List of active threads in the isolate.
Thread* free_list_; // Free list of Thread objects that can be reused.
+
// TODO(asiva): Currently we treat a mutator thread as a special thread
// and always schedule execution of Dart code on the same mutator thread
// object. The ApiLocalScope has been made thread specific but we still
@@ -89,12 +59,8 @@ class ThreadRegistry {
// added.
Thread* mutator_thread_;
- // Safepoint rendezvous state.
- bool in_rendezvous_; // A safepoint rendezvous request is in progress.
- intptr_t remaining_; // Number of threads yet to reach their safepoint.
- int64_t round_; // Counter, to prevent missing updates to remaining_
- // (see comments in CheckSafepointLocked).
-
+ friend class Isolate;
+ friend class SafepointHandler;
DISALLOW_COPY_AND_ASSIGN(ThreadRegistry);
};
« no previous file with comments | « runtime/vm/thread.cc ('k') | runtime/vm/thread_registry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698