我正在为 Rust 中的 C 库构建安全绑定,我开始面临一个奇怪的问题。
我创建了一个结构来拥有指向库返回的对象的不安全指针并安全地释放它们。
这就是我所拥有的:
pub struct VipsImage {
pub(crate) ctx: *mut bindings::VipsImage,
}
impl Drop for VipsImage {
fn drop(&mut self) {
unsafe {
if !self.ctx.is_null() {
bindings::g_object_unref(self.ctx as *mut c_void);
}
}
}
}
只要我不在async
通话之间共享它,它就可以正常工作。如果我在async
函数中返回其中一个对象并在之后使用它,它将被损坏。如果我在一次操作中使用并释放它们,它们会按预期工作。我将如何实现Send
这样Sync
的结构,以便我可以在线程之间安全地共享它?
如果有人想检查完整的库代码,这里是链接