Module: wine Branch: master Commit: 57767a9af85d6d9759eb458b0d3695901ee50a0f URL: https://source.winehq.org/git/wine.git/?a=commit;h=57767a9af85d6d9759eb458b0...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Sep 21 15:54:17 2021 +0200
gdi32: Directly use ntdll for font mutex.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/font.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index e5e294435e9..f916ed97f01 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -5889,9 +5889,15 @@ static const struct font_callback_funcs callback_funcs = { add_gdi_face }; */ void font_init(void) { + OBJECT_ATTRIBUTES attr = { sizeof(attr) }; + UNICODE_STRING name; HANDLE mutex; DWORD disposition;
+ static WCHAR wine_font_mutexW[] = + {'\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s', + '\','_','_','W','I','N','E','_','F','O','N','T','_','M','U','T','E','X','_','_'}; + if (RegCreateKeyExW( HKEY_CURRENT_USER, L"Software\Wine\Fonts", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &wine_fonts_key, NULL )) return; @@ -5904,8 +5910,13 @@ void font_init(void) load_file_system_fonts(); font_funcs->load_fonts();
- if (!(mutex = CreateMutexW( NULL, FALSE, L"__WINE_FONT_MUTEX__" ))) return; - WaitForSingleObject( mutex, INFINITE ); + attr.Attributes = OBJ_OPENIF; + attr.ObjectName = &name; + name.Buffer = wine_font_mutexW; + name.Length = name.MaximumLength = sizeof(wine_font_mutexW); + + if (NtCreateMutant( &mutex, MUTEX_ALL_ACCESS, &attr, FALSE ) < 0) return; + NtWaitForSingleObject( mutex, FALSE, NULL );
RegCreateKeyExW( wine_fonts_key, L"Cache", 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &wine_fonts_cache_key, &disposition ); @@ -5916,7 +5927,7 @@ void font_init(void) update_external_font_keys(); }
- ReleaseMutex( mutex ); + NtReleaseMutant( mutex, NULL );
if (disposition != REG_CREATED_NEW_KEY) {