Skip to content

Commit f7ff234

Browse files
committed
runtime: check if a handle is a valid handle when pinning
1 parent cc0bc04 commit f7ff234

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

runtime/core/HandleTable.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ namespace alaska {
135135
return m_slabs[idx];
136136
}
137137

138-
slabidx_t HandleTable::mapping_slab_idx(Mapping *m) {
138+
slabidx_t HandleTable::mapping_slab_idx(Mapping *m) const {
139139
auto byte_distance = (uintptr_t)m - (uintptr_t)m_table;
140140
return byte_distance / HandleTable::slab_size;
141141
}
@@ -154,6 +154,10 @@ namespace alaska {
154154
}
155155

156156

157+
bool HandleTable::valid_handle(Mapping *m) const {
158+
return mapping_slab_idx(m) < (slabidx_t)m_slabs.size();
159+
}
160+
157161
void HandleTable::put(Mapping *m, alaska::ThreadCache *owner) {
158162
log_trace("Putting handle %p", m);
159163
// Validate that the handle is in this table

runtime/include/alaska/HandleTable.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,15 @@ namespace alaska {
9999
alaska::HandleSlab *new_slab(ThreadCache *new_owner);
100100
alaska::HandleSlab *get_slab(slabidx_t idx);
101101
// Given a mapping, return the index of the slab it belongs to.
102-
slabidx_t mapping_slab_idx(Mapping *m);
102+
slabidx_t mapping_slab_idx(Mapping *m) const;
103103

104104
auto slab_count() const { return m_slabs.size(); }
105105
auto capacity() const { return m_capacity; }
106106

107107
void dump(FILE *stream);
108108

109+
bool valid_handle(alaska::Mapping *m) const;
110+
109111

110112
// Free/release *some* mapping
111113
void put(alaska::Mapping *m, alaska::ThreadCache *owner = (alaska::ThreadCache *)0x1000UL);

runtime/rt/barrier.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <alaska/utils.h>
2121
#include <alaska/alaska.hpp>
2222
#include <alaska/rt/barrier.hpp>
23+
#include <alaska/Runtime.hpp>
2324

2425

2526
#include <ck/lock.h>
@@ -175,6 +176,8 @@ static void record_handle(void* possible_handle, bool marked) {
175176
// return;
176177
// }
177178

179+
if (not alaska::Runtime::get().handle_table.valid_handle(m)) return;
180+
178181
if (m->is_free()) return;
179182

180183
if (marked) printf("pinned %p\n", possible_handle);

0 commit comments

Comments
 (0)