mirror of
https://github.com/Takiiiiiiii/strato.git
synced 2025-07-17 08:46:39 +00:00
Move from dependency on JNI and Implement AtomicMutex
This commit is the start of moving towards a lockless and faster kernel which can run multiple independent threads with fast userspace synchronization.
This commit is contained in:
@ -1,7 +1,27 @@
|
||||
#include "jvm.h"
|
||||
|
||||
thread_local JNIEnv *env;
|
||||
|
||||
namespace skyline {
|
||||
JvmManager::JvmManager(JNIEnv *env, jobject instance) : env(env), instance(instance), instanceClass(env->GetObjectClass(instance)) {}
|
||||
JvmManager::JvmManager(JNIEnv *environ, jobject instance) : instance(instance), instanceClass(reinterpret_cast<jclass>(environ->NewGlobalRef(environ->GetObjectClass(instance)))) {
|
||||
env = environ;
|
||||
if(env->GetJavaVM(&vm) < 0)
|
||||
throw exception("Cannot get JavaVM from environment");
|
||||
}
|
||||
|
||||
void JvmManager::AttachThread() {
|
||||
if(!env)
|
||||
vm->AttachCurrentThread(&env, nullptr);
|
||||
}
|
||||
|
||||
void JvmManager::DetachThread() {
|
||||
if(env)
|
||||
vm->DetachCurrentThread();
|
||||
}
|
||||
|
||||
JNIEnv* JvmManager::GetEnv() {
|
||||
return env;
|
||||
}
|
||||
|
||||
jobject JvmManager::GetField(const char *key, const char *signature) {
|
||||
return env->GetObjectField(instance, env->GetFieldID(instanceClass, key, signature));
|
||||
@ -10,4 +30,8 @@ namespace skyline {
|
||||
bool JvmManager::CheckNull(const char *key, const char *signature) {
|
||||
return env->IsSameObject(env->GetObjectField(instance, env->GetFieldID(instanceClass, key, signature)), nullptr);
|
||||
}
|
||||
|
||||
bool JvmManager::CheckNull(jobject& object) {
|
||||
return env->IsSameObject(object, nullptr);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user