mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-08 22:50:27 +02:00
Remove "ABORTED" atomic forwarding state
It was not distinguishable from "NOT_FORWARDED".
This commit is contained in:
parent
b23b77218c
commit
5fdb14cc5e
4 changed files with 8 additions and 10 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue