This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project.


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

Re: HAVE_POLL is not enough


Philippe De Muyter writes:
 > With the gdb cvs tree of 2000-02-19, on m68k-motorola-sys, configure
 > correctly detect  that we have `poll', but gdb incorrectly assumes that
 > `poll' can be used to wait for `stdin'.  On m68k-motorola-sysv, tty's
 > are not stream-based and not `poll'able.  Should the configure test
 > be enhanced ? I don't think so if we need to run a target program to check
 > that, because it would fail if we cross-compile gdb, but if it can be
 > determined by other ways, like the presence of some constants in some
 > header files then I would agree.  We could also always compile in the `poll'
 > version if HAVE_POLL, but switch to the the fall-back method at run time if
 > poll fails with POLLNVAL.
 > 

Right now the decision on whether to run gdb with or without the event
loop is determined by the user as start up, and it is not detected
neither by configure or at run time. The easiest thing to do for now
is probably tell the user what happened and switch to
non-event-loop mode.  Maybe some configury work could be done to
determine whether the tty's can be pollable, I am not familiar with
your system enough to know whether this is anything feasible.  Sorry I
cannot be of more help here.
How about the 'target async' part, would that work?


 > Meanwhile here is a small patch that at least tell the user what happened.

I'll apply this, thanks.

Elena

 > 
 > Mon Feb 21 12:39:44 2000  Philippe De Muyter  <phdm@macqel.be>
 > 
 > 	* event-loop.c (handle_file_event): Issue an error message when
 > 	poll fails.
 > 
 > --- ./gdb/event-loop.c	Mon Feb 21 12:35:54 2000
 > +++ ./gdb/event-loop.c	Sun Feb 20 19:04:50 2000
 > @@ -697,12 +697,12 @@ handle_file_event (int event_file_desc)
 >  	    {
 >  	      /* Work in progress. We may need to tell somebody what
 >  	         kind of error we had. */
 > -	      /*if (error_mask_returned & POLLHUP)
 > -	         printf_unfiltered ("Hangup detected on fd %d\n", file_ptr->fd);
 > -	         if (error_mask_returned & POLLERR)
 > -	         printf_unfiltered ("Error detected on fd %d\n", file_ptr->fd);
 > -	         if (error_mask_returned & POLLNVAL)
 > -	         printf_unfiltered ("Invalid fd %d\n", file_ptr->fd); */
 > +	      if (error_mask_returned & POLLHUP)
 > +	        printf_unfiltered ("Hangup detected on fd %d\n", file_ptr->fd);
 > +	      if (error_mask_returned & POLLERR)
 > +	        printf_unfiltered ("Error detected on fd %d\n", file_ptr->fd);
 > +	      if (error_mask_returned & POLLNVAL)
 > +	        printf_unfiltered ("Invalid or non-`poll'able fd %d\n", file_ptr->fd);
 >  	      file_ptr->error = 1;
 >  	    }
 >  	  else

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