1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-08 20:52:28 +02:00

Remove "ABORTED" atomic forwarding state

It was not distinguishable from "NOT_FORWARDED".
This commit is contained in:
Andy Wingo 2025-01-13 16:44:12 +01:00
parent b23b77218c
commit 5fdb14cc5e
4 changed files with 8 additions and 10 deletions

View file

@ -8,8 +8,7 @@ enum gc_forwarding_state {
GC_FORWARDING_STATE_FORWARDED, GC_FORWARDING_STATE_FORWARDED,
GC_FORWARDING_STATE_BUSY, GC_FORWARDING_STATE_BUSY,
GC_FORWARDING_STATE_ACQUIRED, GC_FORWARDING_STATE_ACQUIRED,
GC_FORWARDING_STATE_NOT_FORWARDED, GC_FORWARDING_STATE_NOT_FORWARDED
GC_FORWARDING_STATE_ABORTED
}; };
struct gc_atomic_forward { struct gc_atomic_forward {

View file

@ -122,9 +122,10 @@ gc_atomic_forward_retry_busy(struct gc_atomic_forward *fwd) {
memory_order_acquire); memory_order_acquire);
if (tag == gcobj_busy) if (tag == gcobj_busy)
return 0; return 0;
if (tag & gcobj_not_forwarded_bit) if (tag & gcobj_not_forwarded_bit) {
fwd->state = GC_FORWARDING_STATE_ABORTED; fwd->state = GC_FORWARDING_STATE_NOT_FORWARDED;
else { fwd->data = tag;
} else {
fwd->state = GC_FORWARDING_STATE_FORWARDED; fwd->state = GC_FORWARDING_STATE_FORWARDED;
fwd->data = tag; fwd->data = tag;
} }
@ -149,7 +150,7 @@ static inline void
gc_atomic_forward_abort(struct gc_atomic_forward *fwd) { gc_atomic_forward_abort(struct gc_atomic_forward *fwd) {
GC_ASSERT(fwd->state == GC_FORWARDING_STATE_ACQUIRED); GC_ASSERT(fwd->state == GC_FORWARDING_STATE_ACQUIRED);
atomic_store_explicit(tag_word(fwd->ref), fwd->data, memory_order_release); atomic_store_explicit(tag_word(fwd->ref), fwd->data, memory_order_release);
fwd->state = GC_FORWARDING_STATE_ABORTED; fwd->state = GC_FORWARDING_STATE_NOT_FORWARDED;
} }
static inline size_t static inline size_t

View file

@ -599,7 +599,6 @@ copy_space_forward_atomic(struct copy_space *space, struct gc_edge edge,
switch (fwd.state) { switch (fwd.state) {
case GC_FORWARDING_STATE_NOT_FORWARDED: case GC_FORWARDING_STATE_NOT_FORWARDED:
case GC_FORWARDING_STATE_ABORTED:
default: default:
// Impossible. // Impossible.
GC_CRASH(); GC_CRASH();

View file

@ -1497,7 +1497,6 @@ nofl_space_evacuate(struct nofl_space *space, uint8_t *metadata, uint8_t byte,
switch (fwd.state) { switch (fwd.state) {
case GC_FORWARDING_STATE_NOT_FORWARDED: case GC_FORWARDING_STATE_NOT_FORWARDED:
case GC_FORWARDING_STATE_ABORTED:
default: default:
// Impossible. // Impossible.
GC_CRASH(); GC_CRASH();
@ -1552,7 +1551,7 @@ nofl_space_evacuate(struct nofl_space *space, uint8_t *metadata, uint8_t byte,
break; break;
yield_for_spin(spin_count); yield_for_spin(spin_count);
} }
if (fwd.state == GC_FORWARDING_STATE_ABORTED) if (fwd.state == GC_FORWARDING_STATE_NOT_FORWARDED)
// Remove evacuation aborted; remote will mark and enqueue. // Remove evacuation aborted; remote will mark and enqueue.
return 0; return 0;
ASSERT(fwd.state == GC_FORWARDING_STATE_FORWARDED); ASSERT(fwd.state == GC_FORWARDING_STATE_FORWARDED);
@ -1599,7 +1598,7 @@ nofl_space_forward_if_evacuated(struct nofl_space *space,
break; break;
yield_for_spin(spin_count); yield_for_spin(spin_count);
} }
if (fwd.state == GC_FORWARDING_STATE_ABORTED) if (fwd.state == GC_FORWARDING_STATE_NOT_FORWARDED)
// Remote evacuation aborted; remote will mark and enqueue. // Remote evacuation aborted; remote will mark and enqueue.
return 1; return 1;
ASSERT(fwd.state == GC_FORWARDING_STATE_FORWARDED); ASSERT(fwd.state == GC_FORWARDING_STATE_FORWARDED);