[PATCH 02/11] wineandroid: Use pthread for window data locking.
Jacek Caban
wine at gitlab.winehq.org
Mon Jun 6 19:33:01 CDT 2022
From: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
dlls/wineandroid.drv/android.h | 1 +
dlls/wineandroid.drv/init.c | 1 +
dlls/wineandroid.drv/window.c | 19 ++++++-------------
3 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h
index 4348818aaf2..8008db52cfb 100644
--- a/dlls/wineandroid.drv/android.h
+++ b/dlls/wineandroid.drv/android.h
@@ -81,6 +81,7 @@ extern int ioctl_set_cursor( int id, int width, int height,
* USER driver
*/
+extern pthread_mutex_t win_data_mutex DECLSPEC_HIDDEN;
extern INT ANDROID_GetKeyNameText( LONG lparam, LPWSTR buffer, INT size ) DECLSPEC_HIDDEN;
extern UINT ANDROID_MapVirtualKeyEx( UINT code, UINT maptype, HKL hkl ) DECLSPEC_HIDDEN;
extern SHORT ANDROID_VkKeyScanEx( WCHAR ch, HKL hkl ) DECLSPEC_HIDDEN;
diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c
index 33acb4376c5..f769608befd 100644
--- a/dlls/wineandroid.drv/init.c
+++ b/dlls/wineandroid.drv/init.c
@@ -578,6 +578,7 @@ static BOOL process_attach(void)
pthread_mutexattr_init( &attr );
pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE );
pthread_mutex_init( &drawable_mutex, &attr );
+ pthread_mutex_init( &win_data_mutex, &attr );
pthread_mutexattr_destroy( &attr );
if ((java_vm = *p_java_vm)) /* running under Java */
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c
index 6b019445805..18ae919651d 100644
--- a/dlls/wineandroid.drv/window.c
+++ b/dlls/wineandroid.drv/window.c
@@ -60,14 +60,7 @@ struct android_win_data
#define SWP_AGG_NOPOSCHANGE (SWP_NOSIZE | SWP_NOMOVE | SWP_NOCLIENTSIZE | SWP_NOCLIENTMOVE | SWP_NOZORDER)
-static CRITICAL_SECTION win_data_section;
-static CRITICAL_SECTION_DEBUG critsect_debug =
-{
- 0, 0, &win_data_section,
- { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
- 0, 0, { (DWORD_PTR)(__FILE__ ": win_data_section") }
-};
-static CRITICAL_SECTION win_data_section = { &critsect_debug, -1, 0, 0, 0, 0 };
+pthread_mutex_t win_data_mutex;
static struct android_win_data *win_data_context[32768];
@@ -130,7 +123,7 @@ static struct android_win_data *alloc_win_data( HWND hwnd )
data->hwnd = hwnd;
data->window = create_ioctl_window( hwnd, FALSE,
(float)get_win_monitor_dpi( hwnd ) / NtUserGetDpiForWindow( hwnd ));
- EnterCriticalSection( &win_data_section );
+ pthread_mutex_lock( &win_data_mutex );
win_data_context[context_idx(hwnd)] = data;
}
return data;
@@ -143,7 +136,7 @@ static struct android_win_data *alloc_win_data( HWND hwnd )
static void free_win_data( struct android_win_data *data )
{
win_data_context[context_idx( data->hwnd )] = NULL;
- LeaveCriticalSection( &win_data_section );
+ pthread_mutex_unlock( &win_data_mutex );
if (data->window) release_ioctl_window( data->window );
HeapFree( GetProcessHeap(), 0, data );
}
@@ -159,9 +152,9 @@ static struct android_win_data *get_win_data( HWND hwnd )
struct android_win_data *data;
if (!hwnd) return NULL;
- EnterCriticalSection( &win_data_section );
+ pthread_mutex_lock( &win_data_mutex );
if ((data = win_data_context[context_idx(hwnd)]) && data->hwnd == hwnd) return data;
- LeaveCriticalSection( &win_data_section );
+ pthread_mutex_unlock( &win_data_mutex );
return NULL;
}
@@ -173,7 +166,7 @@ static struct android_win_data *get_win_data( HWND hwnd )
*/
static void release_win_data( struct android_win_data *data )
{
- if (data) LeaveCriticalSection( &win_data_section );
+ if (data) pthread_mutex_unlock( &win_data_mutex );
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/193
More information about the wine-devel
mailing list