-----Original Message-----
From: gerard patel <[EMAIL PROTECTED]>
To: Guy L. Albertelli <[EMAIL PROTECTED]>
Cc: [EMAIL PROTECTED] <[EMAIL PROTECTED]>
Date: Friday, June 02, 2000 3:37 AM
Subject: Re: Wordpad 98 fails with Address space separation
>At 02:04 AM 6/2/00 -0400, you wrote:
>>Wordpad 98 fails with adr-sep patches
>
>I don't see the problem here...Maybe a 'native' Dlls is coming in the way ?
>Gerard
>
No, I don't think so. The problem seems to be a TASK_KillTask() call that
has been added to ExitThread() as part of the address space separation. With
the call removed, things work normally. And with this process being really
32 bit I have to question it. The associated part of the patch is:
@@ -347,13 +347,12 @@
if (req->last)
MODULE_DllProcessDetach( TRUE, (LPVOID)1 );
- TASK_KillTask( 0 );
exit( code );
}
else
MODULE_DllThreadDetach( NULL );
- PROCESS_CallUserSignalProc( USIG_THREAD_EXIT, 0 );
+ TASK_KillTask( 0 );
SYSDEPS_ExitThread( code );
}
}
An annotated log is below, note the end: (also *all* lines of "trace:task:"
are present)
Current dir /home/albertel/t1/mywine-adr-space
/home/albertel/t1/mywine-adr-space/wine -managed -winver win95 -debugmsg
+relay,+task C:\Program Files\Accessories\wordpad.exe
Could not stat /mnt/winflp, ignoring drive A:
trace:task:TASK_Create module='wordpad'
cmdline='iles\Accessories\wordpad.exe"' task=011f
trace:relay:PE_InitDLL
CallTo32(entryproc=0x400ea224,module=40157000,type=1,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x404e2750,module=404df000,type=1,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x408b4824,module=408b3000,type=1,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x400ea224,module=40157000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x404e2750,module=404df000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x408b4824,module=408b3000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40505bd0,module=404ff000,type=1,res=(nil))
trace:relay:WINPROC_CallWndProc
(wndproc=0x4007ad70,hwnd=0000008c,msg=WM_NCCREATE,wp=00000000,lp=00000000)
trace:relay:PE_InitDLL
CallTo32(entryproc=0x780017fd,module=78000000,type=1,res=0x1)
Call kernel32.427: GetVersion() ret=78001829 fs=008f
Ret kernel32.427: GetVersion() retval=c0000004 ret=78001829 fs=008f
Call kernel32.461: HeapCreate(00000000,00001000,00000000) ret=780039d6
fs=008f
...
<snip - many lines - normal processing>
...
Call kernel32.195: EnterCriticalSection(78037118) ret=78001075 fs=008f
Ret kernel32.195: EnterCriticalSection() retval=0805eed0 ret=78001075
fs=008f
Call kernel32.494: LeaveCriticalSection(78037118) ret=780012b1 fs=008f
Ret kernel32.494: LeaveCriticalSection() retval=7803711c ret=780012b1
fs=008f
Call kernel32.178:
CreateThread(00000000,00000000,780025ff,40d42320,00000004,40d422e0)
ret=780025f3 fs=008f
Ret kernel32.178: CreateThread() retval=00000094 ret=780025f3 fs=008f
Call kernel32.587: ResumeThread(00000094) ret=5f40def4 fs=008f
trace:relay:PE_InitDLL
CallTo32(entryproc=0x400ea224,module=40157000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x404e2750,module=404df000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x408b4824,module=408b3000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40505bd0,module=404ff000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x780017fd,module=78000000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x5f40f9a1,module=5f400000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40611f80,module=4060c000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40561a60,module=4055c000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x7ff31bbe,module=7ff30000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x6534cf98,module=65340000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x400a6a10,module=400a3000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0xbfe41038,module=bfe40000,type=2,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x48014d8c,module=48000000,type=2,res=(nil))
Call kernel32.694: TlsSetValue(00000000,40d42320) ret=78002635 fs=0547
^^^^^^
<Note the new thread's fs value>
Ret kernel32.694: TlsSetValue() retval=00000001 ret=78002635 fs=0547
...
<snip - many lines - normal processing and switching between threads>
...
Call kernel32.255: FindResourceA(01000000,0000009a,0000000e) ret=5f408203
fs=008f
Ret kernel32.255: FindResourceA() retval=01022890 ret=5f408203 fs=008f
Call user32.363: LoadIconA(01000000,0000009a) ret=0100c785 fs=008f
Call kernel32.195: EnterCriticalSection(5f4d00b0) ret=5f4017f7 fs=0547
Ret kernel32.195: EnterCriticalSection() retval=08a3a748 ret=5f4017f7
fs=0547
Call kernel32.494: LeaveCriticalSection(5f4d00b0) ret=5f401806 fs=0547
Ret kernel32.494: LeaveCriticalSection() retval=5f4d00b4 ret=5f401806
fs=0547
...
< procesing continues in fs=0547 thread>
<snip>
...
Ret kernel32.694: TlsSetValue() retval=00000001 ret=780026eb fs=0547
Call kernel32.215: ExitThread(00000000) ret=7800268c fs=0547
^^^^^^^^^^
Here we start to terminate thread for fs=0547
trace:relay:PE_InitDLL
CallTo32(entryproc=0x48014d8c,module=48000000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0xbfe41038,module=bfe40000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x400a6a10,module=400a3000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x6534cf98,module=65340000,type=3,res=(nil))
Call kernel32.693: TlsGetValue(00000004) ret=653687ba fs=0547
Ret kernel32.693: TlsGetValue() retval=00000000 ret=653687ba fs=0547
Ret user32.363: LoadIconA() retval=0000055e ret=0100c785 fs=008f
^^^^^^
<note switch back to other thread>
Call kernel32.693: TlsGetValue(00000001) ret=5f401018 fs=008f
Ret kernel32.693: TlsGetValue() retval=403ecf5c ret=5f401018 fs=008f
Call kernel32.693: TlsGetValue(00000001) ret=5f401018 fs=008f
Ret kernel32.693: TlsGetValue() retval=403ecf5c ret=5f401018 fs=008f
Call kernel32.255: FindResourceA(01000000,000000a5,0000000e) ret=5f408203
fs=008f
Ret kernel32.255: FindResourceA() retval=010228b0 ret=5f408203 fs=008f
Call user32.363: LoadIconA(01000000,000000a5) ret=0100c79c fs=008f
Call kernel32.693: TlsGetValue(00000003) ret=653b6b2b fs=0547
^^^^^^^
<note switch back to fs=0547 thread, and fs=008f thread is in middle of call
to LoadIcon>
Ret kernel32.693: TlsGetValue() retval=00000000 ret=653b6b2b fs=0547
Call kernel32.694: TlsSetValue(00000003,00000000) ret=653b6ba8 fs=0547
Ret kernel32.694: TlsSetValue() retval=00000001 ret=653b6ba8 fs=0547
trace:relay:PE_InitDLL
CallTo32(entryproc=0x7ff31bbe,module=7ff30000,type=3,res=(nil))
Call kernel32.693: TlsGetValue(00000002) ret=7ff31e58 fs=0547
Ret kernel32.693: TlsGetValue() retval=00000000 ret=7ff31e58 fs=0547
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40561a60,module=4055c000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40611f80,module=4060c000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x5f40f9a1,module=5f400000,type=3,res=(nil))
Call kernel32.693: TlsGetValue(00000001) ret=5f401018 fs=0547
Ret kernel32.693: TlsGetValue() retval=00000000 ret=5f401018 fs=0547
Call kernel32.501: LocalAlloc(00000040,00000118) ret=5f40f43a fs=0547
...
<snip - many lines - normal processing>
...
Ret kernel32.494: LeaveCriticalSection() retval=5f4d0028 ret=5f40ff8e
fs=0547
trace:relay:PE_InitDLL
CallTo32(entryproc=0x780017fd,module=78000000,type=3,res=(nil))
Call kernel32.693: TlsGetValue(00000000) ret=780026d7 fs=0547
Ret kernel32.693: TlsGetValue() retval=00000000 ret=780026d7 fs=0547
Call kernel32.694: TlsSetValue(00000000,00000000) ret=780026eb fs=0547
Ret kernel32.694: TlsSetValue() retval=00000001 ret=780026eb fs=0547
trace:relay:PE_InitDLL
CallTo32(entryproc=0x40505bd0,module=404ff000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x408b4824,module=408b3000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x404e2750,module=404df000,type=3,res=(nil))
trace:relay:PE_InitDLL
CallTo32(entryproc=0x400ea224,module=40157000,type=3,res=(nil))
err:thread:ExitThread Ending only a thread
^^^^
<added message in ExitThread prior to TASK_KillTask call in else clause
(req->last is FALSE)>
trace:task:TASK_KillTask Killing task 011f
trace:task:TASK_KillTask this is the last task, exiting
^^^^^^^^^^
<issued when local static variable nTaskCount<=1 (it really was 1),
which then calls ExitKernel16,
which then calls TerminateProcess!!
But we only wanted to terminate the thread and never returned from
TASK_KillTask!!!!>
[albertel@wimp albertel]$