Mail Archives: cygwin/2011/10/20/08:14:23
On 10/19/2011 4:15 PM, Ken Brown wrote:
> I don't have a testcase yet, but I have a clearer idea of what's
> happening. It actually has nothing to do with the gdb subprocess, but
> rather is a problem that can occur whenever emacs is running its main
> command loop. emacs polls for keyboard input while also using select to
> check for output from subprocesses. It's in this setting that select
> often fails with EINTR, even when there are no subprocesses running. I
> wonder if the keyboard polling is doing something that interrupts the
> select call.
I think this guess is correct. If I start up emacs and do nothing,
strace shows many sequences like the following:
- emacs calls select
- a timer sends SIGALRM
- select returns -1 with error EINTR
The EINTR isn't actually visible in the strace output, but I do see
"select_stuff::wait: signal received". A glance at select.cc indicates
that this is the debug output produced by select when it is about to
return -1 with EINTR.
These sequences always occur in connection with start_thread_socket.
I've appended a typical excerpt from the strace output below. Please
let me know if you need to see more strace output. I didn't want to
spam the list by sending too much.
You still might need more information, but I can at least refine my
original question: Is it reasonable that select should give up and
return -1 because a timer has sent SIGALRM?
Ken
[...]
686 8226742 [main] emacs 6772 cygwin_select: 6, 0x28C134, 0x28C12C,
0x0, 0x28C200
[...]
106 8227514 [main] emacs 6772 select_stuff::wait: m 4, ms 464
49 8227563 [select_socket] emacs 6772 thread_socket: stuff_start
0x28C098
53 8227616 [select_socket] emacs 6772 peek_socket: read_ready: 0,
write_ready: 0, except_ready: 0
2501 8230117 [itimer] emacs 6772 timer_thread: timed out
66 8230183 [itimer] emacs 6772 timer_thread: 0x6118D560 sending sig 14
52 8230235 [itimer] emacs 6772 sig_send: sendsig 0x104, pid 6772,
signal 14, its_me 1
52 8230287 [itimer] emacs 6772 sig_send: Not waiting for
sigcomplete. its_me 1 signal 14
5 8230292 [sig] emacs 6772 sigpacket::process: signal 14 processing
35 8230327 [itimer] emacs 6772 sig_send: returning 0x0 from sending
signal 14
28 8230355 [sig] emacs 6772 _cygtls::find_tls: sig 14
61 8230416 [sig] emacs 6772 sigpacket::process: signal 14, about to
call 0x5E85A8
37 8230453 [sig] emacs 6772 setup_handler: controlled interrupt.
stackptr 0x28DA34, stack 0x28DA30, stackptr[-1] 0x4F2F4C
[...]
35 8230632 [sig] emacs 6772 _cygtls::interrupt_setup: armed
signal_arrived 0x154, sig 14, res 1
57 8230689 [sig] emacs 6772 setup_handler: signal 14 delivered
40 8230729 [sig] emacs 6772 sigpacket::process: returning 1
51 8230780 [main] emacs 6772 select_stuff::cleanup: calling cleanup
routines
596 8231376 [main] emacs 6772 socket_cleanup: si 0x8016D220
si->thread 0x611773F0
307 8231683 [select_socket] emacs 6772 thread_socket: leaving
thread_socket
696 8232379 [main] emacs 6772 socket_cleanup: returning
56 8232435 [main] emacs 6772 select_stuff::wait: signal received
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -