From: Twaik Yont <9674930+twaik@users.noreply.github.com> ntdll symbols used by wineandroid are already available through the link-time dependency, making the manual dlsym lookup unnecessary. Switch to direct symbol references and remove the corresponding function pointer indirection. This simplifies the code and avoids redundant runtime symbol resolution. Dynamic loading is still used for Android system libraries where appropriate. Signed-off-by: Twaik Yont <9674930+twaik@users.noreply.github.com> --- dlls/wineandroid.drv/android.h | 5 ++--- dlls/wineandroid.drv/device.c | 9 +++------ dlls/wineandroid.drv/init.c | 23 ++++------------------- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h index bffbee75145..d53f89c2957 100644 --- a/dlls/wineandroid.drv/android.h +++ b/dlls/wineandroid.drv/android.h @@ -176,9 +176,8 @@ union event_data int send_event( const union event_data *data ); -extern JavaVM **p_java_vm; -extern jobject *p_java_object; -extern unsigned short *p_java_gdt_sel; +extern JavaVM *java_vm; +extern jobject java_object; /* string helpers */ diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index 36e5ad5bb90..b6b3cdd945b 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -568,13 +568,11 @@ static int status_to_android_error( unsigned int status ) static jobject load_java_method( jmethodID *method, const char *name, const char *args ) { - jobject object = *p_java_object; - if (!*method) { jclass class; - class = (*jni_env)->GetObjectClass( jni_env, object ); + class = (*jni_env)->GetObjectClass( jni_env, java_object ); *method = (*jni_env)->GetMethodID( jni_env, class, name, args ); if (!*method) { @@ -582,7 +580,7 @@ static jobject load_java_method( jmethodID *method, const char *name, const char return NULL; } } - return object; + return java_object; } static void create_desktop_view(void) @@ -957,10 +955,9 @@ static const ioctl_func ioctl_funcs[] = static void *ioctl_thread_proc(void *arg) { - JavaVM *java_vm; int listen_fd, epoll_fd; - if (!(java_vm = *p_java_vm)) return NULL; /* not running under Java */ + if (!java_vm) return NULL; /* not running under Java */ (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); create_desktop_view(); diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index a7706abf5e0..08570fb165a 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -83,7 +83,7 @@ void init_monitors( int width, int height ) wine_dbgstr_rect( &rect ), wine_dbgstr_rect( &monitor_rc_work )); /* if we're notified from Java thread, update registry */ - if (*p_java_vm) NtUserCallNoParam( NtUserCallNoParam_DisplayModeChanged ); + if (java_vm) NtUserCallNoParam( NtUserCallNoParam_DisplayModeChanged ); } @@ -167,7 +167,7 @@ void set_screen_dpi( DWORD dpi ) */ static void fetch_display_metrics(void) { - if (*p_java_vm) return; /* for Java threads it will be set when the top view is created */ + if (java_vm) return; /* for Java threads it will be set when the top view is created */ SERVER_START_REQ( get_window_rectangles ) { @@ -363,26 +363,11 @@ static void load_android_libs(void) #undef DECL_FUNCPTR #undef LOAD_FUNCPTR -JavaVM **p_java_vm = NULL; -jobject *p_java_object = NULL; -unsigned short *p_java_gdt_sel = NULL; - NTSTATUS __wine_unix_lib_init(void) { pthread_mutexattr_t attr; jclass class; - jobject object; JNIEnv *jni_env; - JavaVM *java_vm; - void *ntdll; - - if (!(ntdll = dlopen( "ntdll.so", RTLD_NOW ))) return STATUS_UNSUCCESSFUL; - - p_java_vm = dlsym( ntdll, "java_vm" ); - p_java_object = dlsym( ntdll, "java_object" ); - p_java_gdt_sel = dlsym( ntdll, "java_gdt_sel" ); - - object = *p_java_object; init_android_log_verbosity(); init_ahardwarebuffers(); @@ -392,7 +377,7 @@ NTSTATUS __wine_unix_lib_init(void) pthread_mutex_init( &win_data_mutex, &attr ); pthread_mutexattr_destroy( &attr ); - if ((java_vm = *p_java_vm)) /* running under Java */ + if (java_vm) /* running under Java */ { #ifdef __i386__ WORD old_fs; @@ -400,7 +385,7 @@ NTSTATUS __wine_unix_lib_init(void) #endif load_android_libs(); (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); - class = (*jni_env)->GetObjectClass( jni_env, object ); + class = (*jni_env)->GetObjectClass( jni_env, java_object ); (*jni_env)->RegisterNatives( jni_env, class, methods, ARRAY_SIZE( methods )); (*jni_env)->DeleteLocalRef( jni_env, class ); #ifdef __i386__ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10569