(jni_env: *mut JNIEnv)
| 254 | } |
| 255 | |
| 256 | unsafe fn get_stack_trace_field(jni_env: *mut JNIEnv) -> Result<jfieldID, String> { |
| 257 | static mut STACK_TRACE_FIELD: jfieldID = 0 as jfieldID; |
| 258 | static ONCE: Once = ONCE_INIT; |
| 259 | ONCE.call_once(|| { |
| 260 | let throwable_class = get_throwable_class(jni_env).unwrap_or(ptr::null_mut()); |
| 261 | if !throwable_class.is_null() { |
| 262 | // We swallow exceptions in here on purpose |
| 263 | let field_name_str = CString::new("stackTrace").unwrap(); |
| 264 | let field_sig_str = CString::new("[Ljava/lang/StackTraceElement;").unwrap(); |
| 265 | STACK_TRACE_FIELD = (**jni_env).GetFieldID.unwrap()(jni_env, |
| 266 | throwable_class, |
| 267 | field_name_str.as_ptr(), |
| 268 | field_sig_str.as_ptr()); |
| 269 | let _ = util::result_or_jni_ex((), jni_env); |
| 270 | } |
| 271 | }); |
| 272 | if STACK_TRACE_FIELD.is_null() { return Result::Err("No stackTrace field".to_string()); } |
| 273 | return Result::Ok(STACK_TRACE_FIELD); |
| 274 | } |
| 275 | |
| 276 | unsafe fn populate_stack_params(jni_env: *mut JNIEnv, this: jobject, thread: jthread) -> Result<(), String> { |
| 277 | // Grab the depth we want |
no test coverage detected