idlc hangs - strace

Rupert Mazzucco rmaz at gmx.net
Sat Sep 2 22:36:49 UTC 2006


Ok, some days I mentioned that openoffice's "idlc", when built on my 
uClibc-0.9.28
system, hangs when it should exit.  I now had the bright idea to do a 
strace and here
is what that gives:

  > strace idlc
  ... (execve, lots of initialization stuff, looking for libraries etc,
  then the real program starts executing about here:)
  rt_sigaction(SIGRTMIN, {0xb7d7a210, [], SA_RESTORER, 0xb7c195d8}, 
NULL, 8) = 0
  rt_sigaction(SIGRT_1, {0xb7d7a180, [RTMIN], SA_RESTORER, 0xb7c195d8}, 
NULL, 8) = 0
  rt_sigaction(SIGRT_2, {0xb7d79830, [], SA_RESTORER, 0xb7c195d8}, NULL, 
8) = 0
  rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
  rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
  getpid()                                = 21044
  gettimeofday({1157234250, 343931}, NULL) = 0
  gettimeofday({1157234250, 354096}, NULL) = 0
  old_mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 
-1, 0) = 0xb7bbe000
  old_mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 
-1, 0) = 0xb7bae000
  old_mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 
-1, 0) = 0xb7b9e000
  brk(0x8086000)                          = 0x8086000
  pipe([3, 4])                            = 0
  clone(child_stack=0x8085bf4, 
flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 21045
  write(4, 
"\0\0\0\0\5\0\0\0\377\377\377\377\0\0\0\0\220.\223\277\210"..., 148) = 148
  rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
  write(4, "`\23\330\267\0\0\0\0\0\0\0\0\36\317\332\267\n\0\0\0\0\0"..., 
148) = 148
  rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
  rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be 
restarted)
  --- SIGRTMIN (Unknown signal 32) @ 0 (0) ---
  sigreturn()                             = ? (mask now [RTMIN])
  ... (attempts to find files which it can't, so it writes a usage 
message and tries to exit)
  rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
  rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be 
restarted)
  --- SIGRTMIN (Unknown signal 32) @ 0 (0) ---
  sigreturn()                             = ? (mask now [RTMIN])
  wait4(21045, NULL, __WCLONE, NULL)      = 21045
  munmap(0xb7b6e000, 65536)               = 0
  rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
  rt_sigsuspend([]

and that's it.  This last sequence looks like "exit()" in the source 
code.  It looks like
it could actually return after the wait4 and munmap, but why doesn't it 
and tries this rt_sigsuspend thing again?  What is this supposed to 
accomplish anyway?  Who is supposed to
send this RTMIN signal which obviously never happens?


Thanks,
Rupert



More information about the uClibc mailing list