This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question about Cygwin's select()


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]