use jni_sys::{JavaVM, JNIEnv};
use std::ptr;
use std::os::raw::c_void;
pub struct JvmAttachment {
jni_environment: *mut JNIEnv,
jvm: *mut JavaVM,
}
impl JvmAttachment {
pub unsafe fn new(jvm: *mut JavaVM) -> JvmAttachment {
let mut jvm_attachment = JvmAttachment {
jni_environment: ptr::null_mut(),
jvm: jvm,
};
let _ = (**jvm).AttachCurrentThread.unwrap()(
jvm,
(&mut jvm_attachment.jni_environment as *mut *mut JNIEnv) as *mut *mut c_void,
ptr::null_mut(),
);
jvm_attachment
}
pub fn jni_environment(&self) -> *mut JNIEnv {
self.jni_environment
}
}
impl Drop for JvmAttachment {
fn drop(&mut self) {
unsafe {
let _ = (**self.jvm).DetachCurrentThread.unwrap()(
self.jvm,
);
}
}
}