[Official] WINE info thread
@truekaiser: How about the issue posted above..do you have it as well?
|
|
" i am not playing a witch so i don't know if using a wand will crash the game. |
|
okay on further play it seems I do have the witch freeze bug. but the bug seems to be caused by a slow memory leak. the longer you play the more ram the game eats up till it crashes when trying to load a effect, this can be hastened by going into new areas.
edit grabbed some info. game starts off at about 600mb and jumps to about 1.6 to 1.8gb before it crashes with this error.
Spoiler
Unhandled exception: page fault on read access to 0x28bd6a80 in 32-bit code (0x100dde5a).
Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:100dde5a ESP:0033efb8 EBP:0033efd4 EFLAGS:00210206( R- -- I - -P- ) EAX:0033eff8 EBX:0000006b ECX:d7428ea8 EDX:100de278 ESI:28bd6a80 EDI:28bd6a80 Stack dump: 0x0033efb8: 00000001 0000006b f7075969 f70e8ff4 0x0033efc8: 0033f008 f70cc668 001712e0 0033efe8 0x0033efd8: 100de2a4 28bd6a80 0033eff8 0033f084 0x0033efe8: 009ba8b8 007137db d7428ea8 0013ac58 0x0033eff8: 28bd6a80 00000001 0033f084 21a72cf0 0x0033f008: 00000000 00735a61 0033f084 0000006b Backtrace: =>0 0x100dde5a in d3dx9_42 (+0xdde5a) (0x0033efd4) 1 0x100de2a4 in d3dx9_42 (+0xde2a3) (0x0033efe8) 2 0x007137db in client (+0x3137da) (0x009ba8b8) 3 0x21a72d88 (0x21a72cf0) 0x100dde5a: movsbl 0x0(%edi),%eax Modules: Module Address Debug info Name (127 modules) PE 3f0000- 400000 Deferred ogg PE 400000- bdd000 Export client PE f00000- 10e7000 Deferred d3dcompiler_42 PE 1450000- 146c000 Deferred vorbisfile PE 6c40000- 6d73000 Deferred vorbis PE 10000000-101e5000 Export d3dx9_42 PE 78050000-780b9000 Deferred msvcp100 PE 78aa0000-78b5e000 Deferred msvcr100 ELF 7b800000-7b9cc000 Deferred kernel32<elf> \-PE 7b810000-7b9cc000 \ kernel32 ELF 7bc00000-7bcc5000 Deferred ntdll<elf> \-PE 7bc10000-7bcc5000 \ ntdll ELF 7bf00000-7bf04000 Deferred <wine-loader> ELF 7d0fe000-7d11f000 Deferred localspl<elf> \-PE 7d100000-7d11f000 \ localspl ELF 7d21f000-7d254000 Deferred libgssapi_krb5.so.2 ELF 7d254000-7d29d000 Deferred libcups.so.2 ELF 7d2ba000-7d2d5000 Deferred spoolss<elf> \-PE 7d2c0000-7d2d5000 \ spoolss ELF 7d303000-7d309000 Deferred libxfixes.so.3 ELF 7d368000-7d372000 Deferred libxcursor.so.1 ELF 7d373000-7d3a8000 Deferred uxtheme<elf> \-PE 7d380000-7d3a8000 \ uxtheme ELF 7d45a000-7d484000 Deferred libexpat.so.1 ELF 7d484000-7d4b3000 Deferred libfontconfig.so.1 ELF 7d4b3000-7d4c1000 Deferred libxi.so.6 ELF 7d4c1000-7d4c5000 Deferred libxcomposite.so.1 ELF 7d4c5000-7d4cd000 Deferred libxrandr.so.2 ELF 7d4cd000-7d4d7000 Deferred libxrender.so.1 ELF 7d4d7000-7d4dd000 Deferred libxxf86vm.so.1 ELF 7d4dd000-7d4e1000 Deferred libxinerama.so.1 ELF 7d4e1000-7d504000 Deferred imm32<elf> \-PE 7d4f0000-7d504000 \ imm32 ELF 7d504000-7d50a000 Deferred libxdmcp.so.6 ELF 7d50a000-7d50e000 Deferred libxau.so.6 ELF 7d50e000-7d528000 Deferred libxcb.so.1 ELF 7d528000-7d52d000 Deferred libuuid.so.1 ELF 7d52d000-7d64a000 Deferred libx11.so.6 ELF 7d64a000-7d65a000 Deferred libxext.so.6 ELF 7d65a000-7d672000 Deferred libice.so.6 ELF 7d672000-7d705000 Deferred winex11<elf> \-PE 7d680000-7d705000 \ winex11 ELF 7d705000-7d716000 Deferred libbz2.so.1 ELF 7d716000-7d79f000 Deferred libfreetype.so.6 ELF 7d79f000-7d7e1000 Deferred libncurses.so.5 ELF 7d7e1000-7d81c000 Deferred winspool<elf> \-PE 7d7f0000-7d81c000 \ winspool ELF 7d81c000-7d8fc000 Deferred comdlg32<elf> \-PE 7d820000-7d8fc000 \ comdlg32 ELF 7e0fd000-7e105000 Deferred libsm.so.6 ELF 7e105000-7e1fb000 Deferred oleaut32<elf> \-PE 7e120000-7e1fb000 \ oleaut32 ELF 7e1fb000-7e241000 Deferred libopenal.so.1 ELF 7e279000-7e295000 Deferred openal32<elf> \-PE 7e280000-7e295000 \ openal32 ELF 7e295000-7e2ce000 Deferred usp10<elf> \-PE 7e2a0000-7e2ce000 \ usp10 ELF 7e2ce000-7e3c8000 Deferred comctl32<elf> \-PE 7e2e0000-7e3c8000 \ comctl32 ELF 7e3c8000-7e434000 Deferred shlwapi<elf> \-PE 7e3e0000-7e434000 \ shlwapi ELF 7e434000-7e645000 Deferred shell32<elf> \-PE 7e440000-7e645000 \ shell32 ELF 7e645000-7e6a4000 Deferred dbghelp<elf> \-PE 7e650000-7e6a4000 \ dbghelp ELF 7e6a4000-7e6cd000 Deferred msacm32<elf> \-PE 7e6b0000-7e6cd000 \ msacm32 ELF 7e6cd000-7e746000 Deferred rpcrt4<elf> \-PE 7e6e0000-7e746000 \ rpcrt4 ELF 7e746000-7e84f000 Deferred ole32<elf> \-PE 7e760000-7e84f000 \ ole32 ELF 7e84f000-7e8f8000 Deferred winmm<elf> \-PE 7e860000-7e8f8000 \ winmm ELF 7e8f8000-7e987000 Deferred msvcrt<elf> \-PE 7e910000-7e987000 \ msvcrt ELF 7e987000-7e9e9000 Deferred advapi32<elf> \-PE 7e990000-7e9e9000 \ advapi32 ELF 7e9e9000-7eaa6000 Deferred gdi32<elf> \-PE 7ea00000-7eaa6000 \ gdi32 ELF 7eaa6000-7ebe9000 Deferred user32<elf> \-PE 7eac0000-7ebe9000 \ user32 ELF 7ebe9000-7ebf1000 Deferred libkrb5support.so.0 ELF 7ebf1000-7ec06000 Deferred libz.so.1 ELF 7ec06000-7ec2c000 Deferred libk5crypto.so.3 ELF 7ec2c000-7ecdf000 Deferred libkrb5.so.3 ELF 7ecdf000-7ee1f000 Deferred libcrypto.so.1.0.0 ELF 7ee1f000-7ee70000 Deferred libssl.so.1.0.0 ELF 7ee70000-7ee85000 Deferred libresolv.so.2 ELF 7ee85000-7ee92000 Deferred liblber-2.4.so.2 ELF 7ee92000-7eed6000 Deferred libldap_r-2.4.so.2 ELF 7eed8000-7eee1000 Deferred librt.so.1 ELF 7eee1000-7eef5000 Deferred psapi<elf> \-PE 7eef0000-7eef5000 \ psapi ELF 7eef5000-7ef0e000 Deferred version<elf> \-PE 7ef00000-7ef0e000 \ version ELF 7ef0e000-7ef6c000 Deferred wldap32<elf> \-PE 7ef20000-7ef6c000 \ wldap32 ELF 7ef6c000-7ef78000 Deferred libnss_files.so.2 ELF 7ef78000-7ef83000 Deferred libnss_nis.so.2 ELF 7ef83000-7ef9a000 Deferred libnsl.so.1 ELF 7ef9a000-7efa2000 Deferred libnss_compat.so.2 ELF 7efa2000-7efc8000 Deferred libm.so.6 ELF 7efca000-7efce000 Deferred libkeyutils.so.1 ELF 7efce000-7f000000 Deferred ws2_32<elf> \-PE 7efe0000-7f000000 \ ws2_32 ELF f4ed5000-f4f10000 Deferred libatiadlxx.so ELF f4f48000-f6e8d000 Deferred fglrx_dri.so ELF f6e8d000-f6f77000 Deferred libgl.so.1 ELF f6f77000-f70b4000 Deferred wined3d<elf> \-PE f6f80000-f70b4000 \ wined3d ELF f70b4000-f70ec000 Deferred d3d9<elf> \-PE f70c0000-f70ec000 \ d3d9 ELF f71ec000-f72a9000 Deferred libasound.so.2 PE f72b0000-f72b4000 Deferred riched20 ELF f7303000-f7353000 Deferred libjpeg.so.8 ELF f738b000-f7410000 Deferred windowscodecs<elf> \-PE f73a0000-f7410000 \ windowscodecs ELF f7412000-f7416000 Deferred libdl.so.2 ELF f7416000-f7575000 Deferred libc.so.6 ELF f7575000-f758f000 Deferred libpthread.so.0 ELF f7591000-f7599000 Deferred libatiuki.so.1 ELF f759e000-f75b9000 Deferred libgcc_s.so.1 ELF f75b9000-f75bf000 Deferred libnss_dns.so.2 ELF f75c3000-f75c7000 Deferred libcom_err.so.2 ELF f75c7000-f770a000 Dwarf libwine.so.1 ELF f770b000-f7729000 Deferred ld-linux.so.2 ELF ffffe000-fffff000 Deferred [vdso].so Threads: process tid prio (all id:s are in hex) 00000008 (D) C:\Program Files\Grinding Gear Games\Path of Exile\Client.exe 00000022 0 00000009 0 <== 0000000e services.exe 0000001d 0 0000001c 0 00000015 0 00000010 0 0000000f 0 00000012 winedevice.exe 00000018 0 00000014 0 00000013 0 00000019 plugplay.exe 0000001f 0 0000001b 0 0000001a 0 00000020 explorer.exe 00000021 0 System information: Wine build: wine-1.4-rc3 Platform: i386 Host system: Linux Host version: 3.1.6-gentoo Last edited by truekaiser#7722 on Feb 22, 2012, 8:14:31 PM
|
|
" I've downloaded yours, and tested this with wine-1.4-rc4. So far so good. GA-G31M-ES2L (rev. 2.x) Intel Core 2 Quad Q6600 (No overclocking) Transcend DDR2 800 2GB GIGABYTE NVIDIA GT430 1GB NVIDIA Driver Version: 290.10 Slackware 13.37, 32-bit x86 wine-1.4-rc4 - binary txz (Slackware 13.37) |
|
I altered discomfitor's mmap patch which does seem to stop the memory leak crash bug so you can use it with the normal patch command.
Spoiler
--- dlls/ntdll/ntdll_misc.h +++ dlls/ntdll/ntdll_misc.h @@ -166,6 +166,7 @@ extern BOOL virtual_check_buffer_for_write( void *ptr, SIZE_T size ) DECLSPEC_HI extern void VIRTUAL_SetForceExec( BOOL enable ) DECLSPEC_HIDDEN; extern void virtual_release_address_space( BOOL free_high_mem ) DECLSPEC_HIDDEN; extern struct _KUSER_SHARED_DATA *user_shared_data DECLSPEC_HIDDEN; +extern void remove_mmap_from_cache( HANDLE handle ) DECLSPEC_HIDDEN; /* completion */ extern NTSTATUS NTDLL_AddCompletion( HANDLE hFile, ULONG_PTR CompletionValue, --- dlls/ntdll/om.c +++ dlls/ntdll/om.c @@ -354,6 +354,7 @@ NTSTATUS close_handle( HANDLE handle ) NTSTATUS ret; int fd = server_remove_fd_from_cache( handle ); + remove_mmap_from_cache( handle ); SERVER_START_REQ( close_handle ) { req->handle = wine_server_obj_handle( handle ); --- dlls/ntdll/virtual.c +++ dlls/ntdll/virtual.c @@ -56,6 +56,7 @@ #include "wine/exception.h" #include "wine/list.h" #include "wine/debug.h" +#include "wine/rbtree.h" #include "ntdll_misc.h" WINE_DEFAULT_DEBUG_CHANNEL(virtual); @@ -154,6 +155,7 @@ static const int is_win64 = (sizeof(void *) > sizeof(int)); #define VIRTUAL_HEAP_SIZE (4*1024*1024) static HANDLE virtual_heap; +static HANDLE mmap_heap; static void *preload_reserve_start; static void *preload_reserve_end; static int use_locks; @@ -161,6 +163,55 @@ static int force_exec_prot; /* whether to force PROT_EXEC on all PROT_READ mmap /*********************************************************************** + * mmap cache support + */ + +struct mmap_cache_entry +{ + HANDLE handle; + ACCESS_MASK access; + struct get_mapping_info_reply info; + struct wine_rb_entry entry; +}; + +static int mmap_rb_compare( const void *key, const struct wine_rb_entry *entry ) +{ + const struct mmap_cache_entry *e = WINE_RB_ENTRY_VALUE( entry, const struct mmap_cache_entry, entry ); + HANDLE handle = (HANDLE)key; + + //WINE_FIXME("key=%p, entry=%p\n", handle, e->handle); + return wine_server_user_handle(handle) - wine_server_user_handle(e->handle); +} + +static void *mmap_rb_alloc( size_t size ) +{ + //printf("%s:%u:%s\n", __FILE__, __LINE__, __func__); + return RtlAllocateHeap(mmap_heap, 0, size); +} + +static void *mmap_rb_realloc( void *ptr, size_t size ) +{ + //printf("%s:%u:%s\n", __FILE__, __LINE__, __func__); + return RtlReAllocateHeap(mmap_heap, 0, ptr, size); +} + +static void mmap_rb_free( void *ptr ) +{ + //printf("%s:%u:%s\n", __FILE__, __LINE__, __func__); + RtlFreeHeap(mmap_heap, 0, ptr); +} + +static const struct wine_rb_functions mmap_rb_functions = +{ + mmap_rb_alloc, + mmap_rb_realloc, + mmap_rb_free, + mmap_rb_compare, +}; + +static struct wine_rb_tree mmap_cache; + +/*********************************************************************** * VIRTUAL_GetProtStr */ static const char *VIRTUAL_GetProtStr( BYTE prot ) @@ -1434,6 +1485,11 @@ void virtual_init(void) size = (char *)address_space_start - (char *)0x10000; if (size && wine_mmap_is_in_reserved_area( (void*)0x10000, size ) == 1) wine_anon_mmap( (void *)0x10000, size, PROT_READ | PROT_WRITE, MAP_FIXED ); + + mmap_heap = wine_anon_mmap( NULL, VIRTUAL_HEAP_SIZE, PROT_READ|PROT_WRITE, 0 ); + mmap_heap = RtlCreateHeap( HEAP_NO_SERIALIZE, mmap_heap, VIRTUAL_HEAP_SIZE, + VIRTUAL_HEAP_SIZE, NULL, NULL ); + wine_rb_init( &mmap_cache, &mmap_rb_functions ); } @@ -2373,6 +2429,67 @@ NTSTATUS WINAPI NtUnlockVirtualMemory( HANDLE process, PVOID *addr, SIZE_T *size } +/***********************************************************************/ +/* mmap cache support */ + +/*********************************************************************** + * add_mmap_to_cache + */ +static int add_mmap_to_cache( HANDLE handle, ACCESS_MASK access, const struct get_mapping_info_reply * const reply ) +{ + struct mmap_cache_entry *entry; + + //printf("%s:%u:%s\n", __FILE__, __LINE__, __func__); + if (wine_rb_get(&mmap_cache, handle)) return 0; + entry = RtlAllocateHeap(mmap_heap, 0, sizeof(struct mmap_cache_entry)); + if (!entry) + { + WINE_ERR("out of memory allocating mmap_cache_entry\n"); + return -1; + } + memcpy(&entry->info, reply, sizeof(struct get_mapping_info_reply)); + entry->handle = handle; + entry->access = access; + if (wine_rb_put(&mmap_cache, handle, &entry->entry)) + { + WINE_ERR("error updating rb tree\n"); + return -1; + } + //WINE_FIXME("added info for %p: %p\n", handle, reply); + return 0; +} + + +/*********************************************************************** + * get_cached_mmap + */ +static inline struct get_mapping_info_reply *get_cached_mmap( HANDLE handle, ACCESS_MASK *caccess ) +{ + struct wine_rb_entry *entry; + struct mmap_cache_entry *e; + + *caccess = 0; + entry = wine_rb_get(&mmap_cache, handle); + if (!entry) return NULL; + e = WINE_RB_ENTRY_VALUE(entry, struct mmap_cache_entry, entry); + *caccess = e->access; + //printf("returning cached map info %p\n", &e->info); + + return &e->info; +} + + +/*********************************************************************** + * remove_mmap_from_cache + */ +void remove_mmap_from_cache( HANDLE handle ) +{ + if (!wine_rb_get(&mmap_cache, handle)) return; + //printf("removing cached map info %p\n", handle); + wine_rb_remove(&mmap_cache, handle); +} + + /*********************************************************************** * NtCreateSection (NTDLL.@) * ZwCreateSection (NTDLL.@) @@ -2423,6 +2540,20 @@ NTSTATUS WINAPI NtCreateSection( HANDLE *handle, ACCESS_MASK access, const OBJEC } SERVER_END_REQ; + if (!ret) + { + NTSTATUS res; + SERVER_START_REQ( get_mapping_info ) + { + req->handle = wine_server_obj_handle( *handle ); + req->access = access; + res = wine_server_call( req ); + if ((!res) && add_mmap_to_cache( *handle, access, reply )) + WINE_ERR("error adding mmap to cache\n"); + } + SERVER_END_REQ; + } + NTDLL_free_struct_sd( sd ); return ret; @@ -2463,7 +2594,7 @@ NTSTATUS WINAPI NtMapViewOfSection( HANDLE handle, HANDLE process, PVOID *addr_p { NTSTATUS res; mem_size_t full_size; - ACCESS_MASK access; + ACCESS_MASK access, caccess; SIZE_T size, mask = get_mask( zero_bits ); int unix_handle = -1, needs_close; unsigned int map_vprot, vprot; @@ -2473,6 +2604,7 @@ NTSTATUS WINAPI NtMapViewOfSection( HANDLE handle, HANDLE process, PVOID *addr_p HANDLE dup_mapping, shared_file; LARGE_INTEGER offset; sigset_t sigset; + struct get_mapping_info_reply *r; offset.QuadPart = offset_ptr ? offset_ptr->QuadPart : 0; @@ -2530,6 +2662,19 @@ NTSTATUS WINAPI NtMapViewOfSection( HANDLE handle, HANDLE process, PVOID *addr_p return result.map_view.status; } + r = get_cached_mmap( handle, &caccess ); + if (r && (caccess == access)) + { + map_vprot = r->protect; + base = wine_server_get_ptr( r->base ); + full_size = r->size; + header_size = r->header_size; + dup_mapping = wine_server_ptr_handle( r->mapping ); + shared_file = wine_server_ptr_handle( r->shared_file ); + if ((ULONG_PTR)base != r->base) base = NULL; + res = STATUS_SUCCESS; + } + else SERVER_START_REQ( get_mapping_info ) { req->handle = wine_server_obj_handle( handle ); -- 1.7.6.1 I also made a patch file for the winex11.drv so you can just use the patch file command rather then manually editing it. it has to be used in the same directory as the file being patched.
Spoiler
--- ./opengl.c 2011-12-16 13:15:33.000000000 -0600
+++ ./wine-1.3.35/dlls/winex11.drv/opengl.c 2012-02-22 20:09:31.247496713 -0600 @@ -1639,8 +1639,9 @@ /* SetPixelFormat is not allowed on the X root_window e.g. GetDC(0) */ if(get_glxdrawable(physDev) == root_window) { - ERR("Invalid operation on root_window\n"); - return FALSE; + physDev->current_pf = iPixelFormat; + FIXME("cannot set pixel format on root window\n"); + return TRUE; } /* Check if iPixelFormat is in our list of supported formats to see if it is supported. */ the second patch will work all the way up to the latest release candidate. as for the first one, you do not need to replace your package manager's installed version of wine, you just download the 1.3.35 version, configure it, and then do a make command but NOT make install. there will automatically a script placed in the root of the build tree that will allow you to run that version of wine from there. |
|
hi,
" don't see the difference with discomfitor's patch and don't seem to corect mem leak crash here :s wine-1.4-rc4 debian 3.2.0-1-amd64 nvidia 8600GT driver 295.20 if someone have an idea ^^ Edit: " -gc 2 fixe the probleme Last edited by unk#5067 on Feb 26, 2012, 8:54:38 AM
| |
" This worked for me. Got the game up and running at least. Now I just need to upgrade my computer some more. My FPS is so low I can barely interact with the game. I am on Ubuntu 12.04 (precise) Wine 1.4-rc5 Accidentally downloaded it. Thinking it was the newest stable version. It works really nice. Edit: It isn't my hardware. I should be able to run at max setting now. It seems something is messed up in all the software that I am using to run PoE. My CPUs only read 75% at max on both and the game still stutters and the CPUs is all over the place . dropping % and then going back up.... Last edited by Lebowitz#4736 on Feb 27, 2012, 11:42:47 PM
|
|
Well this is my tale, i have downloaded and installed PoE on my 27"iMac i5, and using crossover to run its starts to check its patch and brings up an error "failed to initialise renderer subsystem", which i have no idea what that means, also I've read thru the thread on hacking into code but being 47 years old its way beyond me, Alzheimer's has already set in add to that ADD, so any easy work around for some one with above condition, am playing it on an old centrino laptop, and staring at 27" of unused real estate.
thanks |
|
Well this is my tale, i have downloaded and installed PoE on my 27"iMac i5, and using crossover to run its starts to check its patch and brings up an error "failed to initialise renderer subsystem", which i have no idea what that means, also I've read thru the thread on hacking into code but being 47 years old its way beyond me, Alzheimer's has already set in add to that ADD, so any easy work around for some one with above condition, am playing it on an old centrino laptop, and staring at 27" of unused real estate.
thanks |
|
i just managed to run this game on my linux machine, which is not the top notch around but is able to run some online games under wine with playable results.
path of exile is not one of those games. you cannot ignore the fact, that this game sucks up a big load of performance for whatever reason. that, and instability issues, will make a linux-wine-solution a no-go area for most serious (hardcore) players. and don't tell me, its a beta. we are talking about a game-engine, that is mostly set in stone, right? |
|