Hello,
why the following patch is not applied?
-----Original Message----- From: David.Goodenough@dga.co.uk [mailto:David.Goodenough@dga.co.uk] Subject: RE: Notes and Java test on 20010216 drop
The Java problem I had with the last drop (the problem with Callout not being initialised) is still there, so obviously the fix that was generated and which fixes the problem has not made it into the CVS.
The good news is that now Java works (if the patch is applied). Now the fonts display correctly. I am not sure what you have done guys, but it works a treat. Now for some more testing with some of the things I wanted to run but could not because of the Java support. Interestingly both the Sun and the IBM JREs now work, where last month with the fix the Sun one produced the wrong output but at least ran to completion, while the IBM one locked up somewhere. Now both run to completion properly.
I was sent this (I think on wine-develop but it might have been directly). It fixes the Callout problem. I forget who originally sent it to me, but I could find out if that is necessary.
diff -ur wine-cvs/if1632/thunk.c wine-uw/if1632/thunk.c --- wine-cvs/if1632/thunk.c Wed Jan 3 22:51:30 2001 +++ wine-uw/if1632/thunk.c Mon Jan 29 00:35:49 2001 @@ -166,7 +166,7 @@ NE_MODULE *pModule;
hModule = GetModuleHandleA( "user32.dll" ); - if ( hModule ) + if ( hModule && !Callout.PeekMessageA ) { #define GETADDR( name ) \ *(FARPROC *)&Callout.name = GetProcAddress( hModule, #name ) @@ -185,10 +185,24 @@ GETADDR( MessageBoxW ); #undef GETADDR } - else WARN("no 32-bit USER\n"); + if ( !hModule && Callout.PeekMessageA ) + { + Callout.PeekMessageA = NULL; + Callout.GetMessageA = NULL; + Callout.SendMessageA = NULL; + Callout.PostMessageA = NULL; + Callout.TranslateMessage = NULL; + Callout.DispatchMessageA = NULL; + Callout.RedrawWindow = NULL; + Callout.WaitForInputIdle = NULL; + Callout.MsgWaitForMultipleObjects = NULL; + Callout.WindowFromDC = NULL; + Callout.MessageBoxA = NULL; + Callout.MessageBoxW = NULL; + }
pModule = NE_GetPtr( GetModuleHandle16( "USER.EXE" ) ); - if ( pModule ) + if ( pModule && !Callout.FinalUserInit16 ) { #define GETADDR( var, name, thk ) \ *(FARPROC *)&Callout.var = THUNK_GetCalloutThunk( pModule, name, \ @@ -201,5 +215,12 @@ GETADDR( UserSignalProc, "SignalProc32", word_lllw ); #undef GETADDR } - else WARN("no 16-bit USER\n"); + if ( !pModule && Callout.FinalUserInit16 ) + { + Callout.FinalUserInit16 = NULL; + Callout.InitThreadInput16 = NULL; + Callout.UserYield16 = NULL; + Callout.DestroyIcon32 = NULL; + Callout.UserSignalProc = NULL; + } } diff -ur wine-cvs/loader/module.c wine-uw/loader/module.c --- wine-cvs/loader/module.c Tue Jan 16 00:29:27 2001 +++ wine-uw/loader/module.c Mon Jan 29 00:30:20 2001 @@ -1432,6 +1432,9 @@ /* decrement the dependencies through the MODULE_FreeLibrary call. */ pwm->refCount++;
+ /* Update the kernel Callout tables */ + THUNK_InitCallout(); + RtlReleasePebLock(); SetLastError( err ); /* restore last error */ HeapFree ( GetProcessHeap(), 0, filename ); @@ -1526,6 +1529,9 @@ HeapFree( GetProcessHeap(), 0, wm->short_filename ); HeapFree( GetProcessHeap(), 0, wm ); } + + /* Update the kernel Callout tables */ + THUNK_InitCallout(); }
/*********************************************************************** diff -ur wine-cvs/miscemu/main.c wine-uw/miscemu/main.c --- wine-cvs/miscemu/main.c Wed Jan 10 02:42:49 2001 +++ wine-uw/miscemu/main.c Mon Jan 29 00:36:05 2001 @@ -34,7 +34,6 @@ MESSAGE( "Cannot load user32.dll\n" ); ExitProcess( GetLastError() ); } - THUNK_InitCallout();
if ((instance = NE_StartMain( main_exe_name, main_exe_file )) < 32) { diff -ur wine-cvs/scheduler/process.c wine-uw/scheduler/process.c --- wine-cvs/scheduler/process.c Sun Jan 28 18:58:09 2001 +++ wine-uw/scheduler/process.c Mon Jan 29 00:36:17 2001 @@ -346,9 +346,6 @@ MODULE_DllProcessAttach( NULL, (LPVOID)1 ); RtlReleasePebLock();
- /* Get pointers to USER routines called by KERNEL */ - THUNK_InitCallout(); - /* Call FinalUserInit routine */ if (Callout.FinalUserInit16) Callout.FinalUserInit16();