"Dan" == Dan Kegel dank@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