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