Then the SIGALARM and sigreturn as above alternate with nothing inbetween them (about 20k times) until I kill X. Nowhere else does such a tight loop appear to occur in the strace log, so I reckon this is the point from which X gobbles 99% CPU and freezes.
I have an strace of the event now. The whole strace is huge, but at one point this happens:
gettimeofday( {1193220908, 897516}, NULL) = 0 {1193220908, 897569}, NULL) = 0 SIG_BLOCK, [IO], [], 8) = 0
gettimeofday(
rt_sigprocmask(
--- SIGALRM (Alarm clock) @ 0 (0) ---
sigreturn() = ? (mask now [IO])
--- SIGALRM (Alarm clock) @ 0 (0) ---
sigreturn() = ? (mask now [IO])
Then the SIGALARM and sigreturn as above alternate with nothing inbetween them (about 20k times) until I kill X. Nowhere else does such a tight loop appear to occur in the strace log, so I reckon this is the point from which X gobbles 99% CPU and freezes.