diff --git a/core/tiny_remote.c b/core/tiny_remote.c index 34d40717..23e5a9b8 100644 --- a/core/tiny_remote.c +++ b/core/tiny_remote.c @@ -595,7 +595,15 @@ uintptr_t tiny_remote_side_get(struct SuperSlab* ss, int slab_idx, void* node) { } if (key == 0) break; } - return 0; + // Fallback: If side table lookup failed (table overflow during push), + // read embedded next pointer from node memory (matches set() fallback at line 583) + uintptr_t fallback_val = atomic_load_explicit((_Atomic uintptr_t*)node, memory_order_acquire); + // If sentinel is present, it means the entry WAS in side table but got evicted + // In this case, we can't recover the next pointer - return 0 to stop chain traversal + if (fallback_val == TINY_REMOTE_SENTINEL) { + return 0; + } + return fallback_val; } void tiny_remote_side_clear(struct SuperSlab* ss, int slab_idx, void* node) {