Skip to content

Commit f525fef

Browse files
committed
Pinning generic memory and owners (wip)
1 parent 708e435 commit f525fef

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/genericmemory.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ jl_genericmemory_t *_new_genericmemory_(jl_value_t *mtype, size_t nel, int8_t is
5454
tot = sizeof(jl_genericmemory_t) + sizeof(void*);
5555
}
5656
m = (jl_genericmemory_t*)jl_gc_alloc(ct->ptls, tot, mtype);
57+
PTR_PIN(m);
5758

5859
if (pooled) {
5960
data = (char*)m + JL_SMALL_BYTE_ALIGNMENT;
@@ -107,9 +108,11 @@ JL_DLLEXPORT jl_genericmemory_t *jl_string_to_genericmemory(jl_value_t *str)
107108
jl_task_t *ct = jl_current_task;
108109
int tsz = sizeof(jl_genericmemory_t) + sizeof(void*);
109110
jl_genericmemory_t *m = (jl_genericmemory_t*)jl_gc_alloc(ct->ptls, tsz, jl_memory_uint8_type);
111+
PTR_PIN(m);
110112
m->length = jl_string_len(str);
111113
m->ptr = jl_string_data(str);
112114
jl_genericmemory_data_owner_field(m) = str;
115+
PTR_PIN(str);
113116
return m;
114117
}
115118

@@ -160,6 +163,7 @@ JL_DLLEXPORT jl_genericmemory_t *jl_ptr_to_genericmemory(jl_value_t *mtype, void
160163
jl_exceptionf(jl_argumenterror_type, "invalid GenericMemory size: too large for system address width");
161164
int tsz = sizeof(jl_genericmemory_t) + sizeof(void*);
162165
m = (jl_genericmemory_t*)jl_gc_alloc(ct->ptls, tsz, mtype);
166+
PTR_PIN(m);
163167
m->ptr = data;
164168
m->length = nel;
165169
jl_genericmemory_data_owner_field(m) = own_buffer ? (jl_value_t*)m : NULL;
@@ -249,9 +253,11 @@ JL_DLLEXPORT jl_genericmemory_t *jl_genericmemory_slice(jl_genericmemory_t *mem,
249253
}
250254
jl_task_t *ct = jl_current_task;
251255
jl_genericmemory_t *newmem = (jl_genericmemory_t*)jl_gc_alloc(ct->ptls, sizeof(jl_genericmemory_t) + sizeof(void*), dt);
256+
PTR_PIN(newmem);
252257
newmem->length = len;
253258
newmem->ptr = data;
254259
jl_genericmemory_data_owner_field(newmem) = jl_genericmemory_owner(mem);
260+
PTR_PIN(jl_genericmemory_owner(mem));
255261
return newmem;
256262
}
257263

0 commit comments

Comments
 (0)