Skip to content

Commit

Permalink
Do not register class more than once
Browse files Browse the repository at this point in the history
  • Loading branch information
dlunch committed Dec 28, 2023
1 parent 1fc6b53 commit 8a10a7e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
4 changes: 4 additions & 0 deletions wie_ktf/src/runtime/java/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@ impl<'a> KtfJavaContext<'a> {
}

pub async fn register_class(core: &mut ArmCore, class: &JavaClass) -> JavaResult<()> {
if JavaContextData::has_class(core, class)? {
return Ok(());
}

JavaContextData::register_class(core, class)?;

let clinit = class.method(&JavaFullName {
Expand Down
9 changes: 8 additions & 1 deletion wie_ktf/src/runtime/java/context/context_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ impl JavaContextData {

pub fn register_class(core: &mut ArmCore, class: &JavaClass) -> JavaResult<()> {
let context_data = Self::read(core)?;
let ptr_classes: alloc::vec::Vec<u32> = read_null_terminated_table(core, context_data.classes_base)?;
let ptr_classes = read_null_terminated_table(core, context_data.classes_base)?;
if ptr_classes.contains(&class.ptr_raw) {
return Ok(());
}
Expand All @@ -71,6 +71,13 @@ impl JavaContextData {
)
}

pub fn has_class(core: &ArmCore, class: &JavaClass) -> JavaResult<bool> {
let context_data = Self::read(core)?;
let ptr_classes = read_null_terminated_table(core, context_data.classes_base)?;

Ok(ptr_classes.contains(&class.ptr_raw))
}

pub fn find_class(core: &ArmCore, name: &str) -> JavaResult<Option<JavaClass>> {
let context_data = Self::read(core)?;
let classes = read_null_terminated_table(core, context_data.classes_base)?;
Expand Down

0 comments on commit 8a10a7e

Please sign in to comment.