>>>> "Dan" == Dan Kegel
<dank(a)kegel.com> writes:
Dan> Uwe Bonnes wrote:
> I don't understand why
pthread_kill_other_threads ist called when a
> programm creates a new process. With the pthread_kill_other_threads
> call, the starting process dies. ... What can happen between chdir()
> and execve() to trigger the pthread_kill_other_threads() call?
Dan> This is per the Posix standard;
Dan>
http://www.opengroup.org/onlinepubs/007908799/xsh/exec.html says:
Dan> "A call to any exec function from a process with more than one
Dan> thread results in all threads being terminated and the new
Dan> executable image being loaded and executed."
Dan> Maybe this is hurting you because LinuxThreads implements fork() in
Dan> a nonstandard way, i.e. maybe it only forks the current thread
Dan> rather than the whole process?
Dan> In any case, what you're trying to do is so common and important
Dan> that maybe it's a glibc bug. Which glibc and kernel are you using?
I am trying to run a windows program combo ( schem.exe from the quicklogic
qworks 9.0 beta). The programm starts, tells about the demo license and then
starts a "background" process called tkwdog.exe, as I understand it.
After the background programm pops up its desktop window, the schem.exe
window isn't refreshed any more. I thought this would relate to
pthread_kill_other_threads_np, but obviously I am wrong. schem.exe hangs in
a WaitForSingleObject call:
Here again an excerpt from the relay log, hopefully more helpfull:
1844 08068938:Call kernel32.CreateEventA(00000000,00000001,00000000,100192a0
"TKMESG response trigger") ret=100168c1
1845 08068938:Ret kernel32.CreateEventA() retval=0000007c ret=100168c1
...
51123 08068938:Call kernel32.ResetEvent(0000007c) ret=100169fd
51124 08068938:Ret kernel32.ResetEvent() retval=00000001 ret=100169fd
51125 08068938:Call kernel32.CreateProcessA(00000000,10019364
"tkwdog.exe",00000000,00000000,00000000,04000000,00000000,00000000,405f6b7c,405f6b6c)
ret=10016a23
51126 fixme:module:CreateProcessA (D:\cae\pasic90\scs\TKWDOG.EXE,...):
CREATE_DEFAULT_ERROR_MODE ignored
51127 fixme:pthread_kill_other_threads_np
51128 FIXME:pthread_rwlock_rdlock
51129 FIXME:pthread_rwlock_unlock
51130 FIXME:pthread_rwlock_rdlock
51131 FIXME:pthread_rwlock_unlock
51132 08068938:Ret kernel32.CreateProcessA() retval=00000001 ret=10016a23
51133 08068938:Call kernel32.WaitForSingleObject(0000007c,ffffffff) ret=10016a4d
51134 096d4e18:Ret x11drv.MsgWaitForMultipleObjectsEx() retval=00000001 ret=406c7efd
51135 096d4e18:Call
x11drv.MsgWaitForMultipleObjectsEx(00000000,00000000,00000000,00000000,00000000)
ret=406c7b80
51136 096d4e18:Ret x11drv.MsgWaitForMultipleObjectsEx() retval=00000102 ret=406c7b80
51137 096d4e18:Call window proc 0x40a134e0
(hwnd=00010020,msg=WM_NCHITTEST,wp=00000000,lp=010b01ac)
51138 096d4e18:Ret window proc 0x40a134e0
(hwnd=00010020,msg=WM_NCHITTEST,wp=00000000,lp=010b01ac) retval=00000001
51139 096d4e18:Call window proc 0x40a134e0
(hwnd=00010020,msg=WM_SETCURSOR,wp=00010020,lp=02000001)
51140 096d4e18:Ret window proc 0x40a134e0
(hwnd=00010020,msg=WM_SETCURSOR,wp=00010020,lp=02000001) retval=00000276
51141 096d4e18:Call window proc 0x40a134e0
(hwnd=00010020,msg=WM_MOUSEMOVE,wp=00000000,lp=010b01ac)
51142 096d4e18:Ret window proc 0x40a134e0
(hwnd=00010020,msg=WM_MOUSEMOVE,wp=00000000,lp=010b01ac) retval=00000000
51143 096d4e18:Call
x11drv.MsgWaitForMultipleObjectsEx(00000000,00000000,00000000,00000000,00000000)
ret=406c7b80
51144 096d4e18:Ret x11drv.MsgWaitForMultipleObjectsEx() retval=00000102 ret=406c7b80
51145 096d4e18:Call
x11drv.MsgWaitForMultipleObjectsEx(00000001,403faec4,ffffffff,00000000,00000000)
ret=406c7efd
There is no more message from process 08068938 until I abort the program
with ^C on the console.
Bye
--
Uwe Bonnes bon(a)elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------