Modified files: dlls/gdi : driver.c loader : module.c
Log message: Codeweavers Replace Rtl...PebLock with Rtl...CriticalSection. Slight change to library loading.
Index: dlls/gdi/driver.c =================================================================== RCS file: /home/wine/wine/dlls/gdi/driver.c,v retrieving revision 1.6 diff -u -r1.6 driver.c --- dlls/gdi/driver.c 2001/09/14 01:00:57 1.6 +++ dlls/gdi/driver.c 2002/01/26 15:02:42 @@ -27,8 +27,8 @@ static struct graphics_driver *first_driver; static struct graphics_driver *display_driver; static const DC_FUNCTIONS *win16_driver; +static CRITICAL_SECTION driver_section = CRITICAL_SECTION_INIT( "driver_section" );
- /********************************************************************** * create_driver * @@ -207,13 +207,13 @@ HMODULE module; struct graphics_driver *driver;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &driver_section );
/* display driver is a special case */ if (!strcasecmp( name, "display" )) { driver = load_display_driver(); - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); return &driver->funcs; }
@@ -224,7 +224,7 @@ if (driver->module == module) { driver->count++; - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); return &driver->funcs; } } @@ -233,19 +233,19 @@ if (!(module = LoadLibraryA( name ))) { if (!win16_driver) win16_driver = WIN16DRV_Init(); - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); return win16_driver; }
if (!(driver = create_driver( module ))) { FreeLibrary( module ); - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); return NULL; }
TRACE( "loaded driver %p for %s\n", driver, name ); - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); return &driver->funcs; }
@@ -259,7 +259,7 @@ { struct graphics_driver *driver;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &driver_section ); if (funcs != win16_driver) { for (driver = first_driver; driver; driver = driver->next) @@ -267,7 +267,7 @@ if (!driver) ERR( "driver not found, trouble ahead\n" ); driver->count++; } - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); return funcs; }
@@ -281,7 +281,7 @@ { struct graphics_driver *driver;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &driver_section );
if (funcs == win16_driver) goto done;
@@ -300,7 +300,7 @@ FreeLibrary( driver->module ); HeapFree( GetProcessHeap(), 0, driver ); done: - RtlReleasePebLock(); + RtlLeaveCriticalSection( &driver_section ); }
Index: loader/module.c =================================================================== RCS file: /home/wine/wine/loader/module.c,v retrieving revision 1.145 diff -u -r1.145 module.c --- loader/module.c 2002/01/18 18:58:08 1.145 +++ loader/module.c 2002/01/26 15:02:43 @@ -29,6 +29,8 @@ static int free_lib_count; /* recursion depth of FreeLibrary calls */ static int process_detaching; /* set on process detach to avoid deadlocks with thread detach */
+static CRITICAL_SECTION loader_section = CRITICAL_SECTION_INIT( "loader_section" ); + /*********************************************************************** * wait_input_idle * @@ -176,9 +178,13 @@ BOOL retv = TRUE; int i;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
- if (!wm) wm = exe_modref; + if (!wm) + { + wm = exe_modref; + PE_InitTls(); + } assert( wm );
/* prevent infinite recursion in case of cyclical dependencies */ @@ -221,7 +227,7 @@ TRACE("(%s,%p) - END\n", wm->modname, lpReserved );
done: - RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); return retv; }
@@ -236,7 +242,7 @@ { WINE_MODREF *wm;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section ); if (bForceDetach) process_detaching = 1; do { @@ -258,7 +264,7 @@ } } while ( wm );
- RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); }
/************************************************************************* @@ -276,8 +282,10 @@ if (process_detaching) return; /* FIXME: there is still a race here */
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
+ PE_InitTls(); + for ( wm = MODULE_modref_list; wm; wm = wm->next ) if ( !wm->next ) break; @@ -292,7 +300,7 @@ MODULE_InitDLL( wm, DLL_THREAD_ATTACH, lpReserved ); }
- RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); }
/************************************************************************* @@ -310,7 +318,7 @@ if (process_detaching) return; /* FIXME: there is still a race here */
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
for ( wm = MODULE_modref_list; wm; wm = wm->next ) { @@ -322,7 +330,7 @@ MODULE_InitDLL( wm, DLL_THREAD_DETACH, lpReserved ); }
- RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); }
/**************************************************************************** @@ -335,7 +343,7 @@ WINE_MODREF *wm; BOOL retval = TRUE;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
wm = MODULE32_LookupHMODULE( hModule ); if ( !wm ) @@ -343,7 +351,7 @@ else wm->flags |= WINE_MODREF_NO_DLL_CALLS;
- RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section );
return retval; } @@ -1231,13 +1239,13 @@ { WINE_MODREF *wm;
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
lpFileName[0] = 0; if ((wm = MODULE32_LookupHMODULE( hModule ))) lstrcpynA( lpFileName, wm->filename, size );
- RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); TRACE("%s\n", lpFileName ); return strlen(lpFileName); } @@ -1284,7 +1292,18 @@ NULL, OPEN_EXISTING, 0, 0 ); if (hFile != INVALID_HANDLE_VALUE) { - hmod = PE_LoadImage( hFile, filename, flags ); + DWORD type; + MODULE_GetBinaryType( hFile, filename, &type ); + if (type == SCS_32BIT_BINARY) + { + HANDLE mapping = CreateFileMappingA( hFile, NULL, PAGE_READONLY, + 0, 0, NULL ); + if (mapping) + { + hmod = (HMODULE)MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); + CloseHandle( mapping ); + } + } CloseHandle( hFile ); } if (hmod) return (HMODULE)((ULONG_PTR)hmod + 1); @@ -1293,7 +1312,7 @@ /* Fallback to normal behaviour */ }
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
wm = MODULE_LoadLibraryExA( libname, hfile, flags ); if ( wm ) @@ -1307,7 +1326,7 @@ } }
- RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); return wm ? wm->module : 0; }
@@ -1381,7 +1400,7 @@ if ( !filename ) return NULL; *filename = 0; /* Just in case we don't set it before goto error */
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section );
if ((flags & LOAD_WITH_ALTERED_SEARCH_PATH) && FILE_contains_path(libname)) { @@ -1459,7 +1478,7 @@ HeapFree ( GetProcessHeap(), 0, (LPSTR)libdir ); libdir = NULL; } - RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); HeapFree ( GetProcessHeap(), 0, filename ); return pwm; } @@ -1511,7 +1530,7 @@ HeapFree ( GetProcessHeap(), 0, (LPSTR)libdir ); libdir = NULL; } - RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); SetLastError( err ); /* restore last error */ HeapFree ( GetProcessHeap(), 0, filename ); return pwm; @@ -1527,7 +1546,7 @@ HeapFree ( GetProcessHeap(), 0, (LPSTR)libdir ); libdir = NULL; } - RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); WARN("Failed to load module '%s'; error=0x%08lx\n", filename, GetLastError()); HeapFree ( GetProcessHeap(), 0, filename ); return NULL; @@ -1634,13 +1653,13 @@ return TRUE; }
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section ); free_lib_count++;
if ((wm = MODULE32_LookupHMODULE( hLibModule ))) retv = MODULE_FreeLibrary( wm );
free_lib_count--; - RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section );
return retv; } @@ -1818,13 +1837,13 @@ else TRACE_(win32)("(%08lx,%p)\n",(DWORD)hModule,function);
- RtlAcquirePebLock(); + RtlEnterCriticalSection( &loader_section ); if ((wm = MODULE32_LookupHMODULE( hModule ))) { retproc = wm->find_export( wm, function, snoop ); if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND); } - RtlReleasePebLock(); + RtlLeaveCriticalSection( &loader_section ); return retproc; }
Hi,
Running the program The 4th Coming after updating today, results into these messages : fixme:win32:SetCriticalSectionSpinCount critsection=0x7ff063b8: spincount=1000 not supported fixme:win32:SetCriticalSectionSpinCount critsection=0x7ff063d8: spincount=1000 not supported err:ntdll:RtlpWaitForCriticalSection section 0x400fa848 "rtl.c: peb_lock" wait timed out, retrying (60 sec) fs=03e7 err:ntdll:RtlpWaitForCriticalSection section 0x400fa848 "rtl.c: peb_lock" wait timed out, retrying (60 sec) fs=0407 err:ntdll:RtlpWaitForCriticalSection section 0x400fa848 "rtl.c: peb_lock" wait timed out, retrying (60 sec) fs=03e7 err:ntdll:RtlpWaitForCriticalSection section 0x400fa848 "rtl.c: peb_lock" wait timed out, retrying (60 sec) fs=0407 err:seh:EXC_DefaultHandling Unhandled exception code c0000194 flags 0 addr 0x4006f284
This program started before and had only problems with CriticalSection one minute after it started. Today i have only access to the login window, then these messages come and that's all i see. (Account is valid and functions when used with Windows ME)
--- Duane Clark dclark@akamail.com a écrit : >
Modified files: dlls/gdi : driver.c loader : module.c
Log message: Codeweavers Replace Rtl...PebLock with Rtl...CriticalSection. Slight change to library loading.
___________________________________________________________ Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français ! Yahoo! Mail : http://fr.mail.yahoo.fr