diff --git a/win32ss/gdi/gdi32/main/dllmain.c b/win32ss/gdi/gdi32/main/dllmain.c index b59dfbe4210..322fc156435 100644 --- a/win32ss/gdi/gdi32/main/dllmain.c +++ b/win32ss/gdi/gdi32/main/dllmain.c @@ -4,6 +4,7 @@ #include +static BOOL gbInitialized = FALSE; extern HGDIOBJ stock_objects[]; BOOL SetStockObjects = FALSE; PDEVCAPS GdiDevCaps = NULL; @@ -40,18 +41,22 @@ VOID WINAPI GdiProcessSetup(VOID) { - hProcessHeap = GetProcessHeap(); + if (!gbInitialized) + { + gbInitialized = TRUE; + hProcessHeap = GetProcessHeap(); - /* map the gdi handle table to user space */ - GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable; - GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable; - GdiDevCaps = &GdiSharedHandleTable->DevCaps; - CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess; - GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList; - GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer; - RtlInitializeCriticalSection(&semLocal); - InitializeCriticalSection(&gcsClientObjLinks); - GdiInitializeLanguagePack(0); + /* map the gdi handle table to user space */ + GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable; + GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable; + GdiDevCaps = &GdiSharedHandleTable->DevCaps; + CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess; + GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList; + GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer; + RtlInitializeCriticalSection(&semLocal); + InitializeCriticalSection(&gcsClientObjLinks); + GdiInitializeLanguagePack(0); + } } VOID