forked from GitHub/bdwgc-rust
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f52f6dcfaf | |||
| 3de34a77e9 | |||
| 81df12684f | |||
| a3a13f061f | |||
| 085028a8e1 | |||
| 04f5f88b33 |
+13
-4
@@ -84,12 +84,21 @@ impl Allocator {
|
|||||||
unsafe { GC_gcollect() }
|
unsafe { GC_gcollect() }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe fn register_finalizer(
|
pub unsafe fn register_finalizer<F: FnOnce(*mut c_void) + 'static>(
|
||||||
ptr: *const c_void,
|
ptr: *const c_void,
|
||||||
finalizer: extern "C" fn(*mut c_void, *mut c_void),
|
finalizer: F,
|
||||||
client_data: *const c_void,
|
|
||||||
) {
|
) {
|
||||||
GC_register_finalizer(ptr, finalizer, client_data, null(), null());
|
extern "C" fn finalize<F: FnOnce(*mut c_void)>(ptr: *mut c_void, data: *mut c_void) {
|
||||||
|
(unsafe { Box::from_raw(data as *mut F) })(ptr)
|
||||||
|
}
|
||||||
|
|
||||||
|
GC_register_finalizer(
|
||||||
|
ptr,
|
||||||
|
finalize::<F>,
|
||||||
|
Box::into_raw(Box::new(finalizer)) as *const _,
|
||||||
|
null(),
|
||||||
|
null(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user