wingo pushed a commit to branch wip-whippet
in repository guile.

commit ac5d54648183a37130b807d0431defd3667c3fd1
Author: Andy Wingo <wi...@igalia.com>
AuthorDate: Mon Jul 8 17:35:58 2024 +0200

    Remove heap_tracer; get to heap from tracer directly
---
 src/parallel-tracer.h | 12 +++++++-----
 src/serial-tracer.h   |  2 +-
 src/tracer.h          |  3 ---
 src/whippet.c         |  3 ---
 4 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/src/parallel-tracer.h b/src/parallel-tracer.h
index 80638603a..6b25ea1a8 100644
--- a/src/parallel-tracer.h
+++ b/src/parallel-tracer.h
@@ -25,6 +25,7 @@ enum trace_worker_state {
 struct gc_heap;
 struct trace_worker {
   struct gc_heap *heap;
+  struct gc_tracer *tracer;
   size_t id;
   size_t steal_id;
   pthread_t thread;
@@ -55,6 +56,7 @@ static int
 trace_worker_init(struct trace_worker *worker, struct gc_heap *heap,
                   struct gc_tracer *tracer, size_t id) {
   worker->heap = heap;
+  worker->tracer = tracer;
   worker->id = id;
   worker->steal_id = 0;
   worker->thread = 0;
@@ -67,7 +69,7 @@ static void trace_worker_trace(struct trace_worker *worker);
 static void*
 trace_worker_thread(void *data) {
   struct trace_worker *worker = data;
-  struct gc_tracer *tracer = heap_tracer(worker->heap);
+  struct gc_tracer *tracer = worker->tracer;
   long trace_epoch = 0;
 
   pthread_mutex_lock(&worker->lock);
@@ -155,7 +157,7 @@ tracer_share(struct local_tracer *trace) {
     shared_worklist_push_many(trace->share_deque, objv, count);
     to_share -= count;
   }
-  tracer_maybe_unpark_workers(heap_tracer(trace->worker->heap));
+  tracer_maybe_unpark_workers(trace->worker->tracer);
 }
 
 static inline void
@@ -218,7 +220,7 @@ trace_worker_should_continue(struct trace_worker *worker) {
   if (worker->id != 0)
     return 0;
 
-  struct gc_tracer *tracer = heap_tracer(worker->heap);
+  struct gc_tracer *tracer = worker->tracer;
 
   for (size_t spin_count = 0;; spin_count++) {
     if (atomic_load_explicit(&tracer->active_tracers,
@@ -249,7 +251,7 @@ trace_worker_should_continue(struct trace_worker *worker) {
 static struct gc_ref
 trace_worker_steal(struct local_tracer *trace) {
   struct trace_worker *worker = trace->worker;
-  struct gc_tracer *tracer = heap_tracer(worker->heap);
+  struct gc_tracer *tracer = worker->tracer;
 
   // It could be that the worker's local trace queue has simply
   // overflowed.  In that case avoid contention by trying to pop
@@ -272,7 +274,7 @@ trace_worker_steal(struct local_tracer *trace) {
 static void
 trace_worker_trace(struct trace_worker *worker) {
   struct gc_heap *heap = worker->heap;
-  struct gc_tracer *tracer = heap_tracer(heap);
+  struct gc_tracer *tracer = worker->tracer;
   atomic_fetch_add_explicit(&tracer->active_tracers, 1, memory_order_acq_rel);
 
   struct local_tracer trace;
diff --git a/src/serial-tracer.h b/src/serial-tracer.h
index c208e10e5..fffa133dd 100644
--- a/src/serial-tracer.h
+++ b/src/serial-tracer.h
@@ -18,7 +18,7 @@ static int
 gc_tracer_init(struct gc_tracer *tracer, struct gc_heap *heap,
                size_t parallelism) {
   tracer->heap = heap;
-  return simple_worklist_init(&heap_tracer(heap)->worklist);
+  return simple_worklist_init(&tracer->worklist);
 }
 static void gc_tracer_prepare(struct gc_tracer *tracer) {}
 static void gc_tracer_release(struct gc_tracer *tracer) {
diff --git a/src/tracer.h b/src/tracer.h
index a49d25887..0208f6aa8 100644
--- a/src/tracer.h
+++ b/src/tracer.h
@@ -10,9 +10,6 @@ struct gc_heap;
 /// To be implemented by collector.
 ////////////////////////////////////////////////////////////////////////
 
-// Initialize the tracer when the heap is created.
-static inline struct gc_tracer* heap_tracer(struct gc_heap *heap);
-
 // Visit all fields in an object.
 static inline void trace_one(struct gc_ref ref, struct gc_heap *heap,
                              void *trace_data) GC_ALWAYS_INLINE;
diff --git a/src/whippet.c b/src/whippet.c
index cf1f6d6e9..d56476ffc 100644
--- a/src/whippet.c
+++ b/src/whippet.c
@@ -351,9 +351,6 @@ struct gc_mutator {
   struct gc_mutator *next;
 };
 
-static inline struct gc_tracer* heap_tracer(struct gc_heap *heap) {
-  return &heap->tracer;
-}
 static inline struct mark_space* heap_mark_space(struct gc_heap *heap) {
   return &heap->mark_space;
 }

Reply via email to