Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [patch] Crashed cross gdb/MinGW host
@ 2006-05-19 10:45 Masaki Muranaka
  2006-05-19 20:46 ` Christopher Faylor
  0 siblings, 1 reply; 6+ messages in thread
From: Masaki Muranaka @ 2006-05-19 10:45 UTC (permalink / raw)
  To: gdb-patches


My sh-elf-gdb on MinGW host was crashed
when I tried to debug using the serial connection.
Here is a patch.

It's possible the another plan to remove writefds
check. There is no support yet for writefds.


- - - -
2006-05-19	Masaki Muranaka <monaka@monami-software.com>
    * mingw-hdep.c (gdb_select)
      Add check if writefds is not NULL.
- - - -
Index: mingw-hdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mingw-hdep.c,v
retrieving revision 1.3
diff -u -p -r1.3 mingw-hdep.c
--- mingw-hdep.c        24 Apr 2006 21:00:13 -0000      1.3
+++ mingw-hdep.c        19 May 2006 09:35:32 -0000
@@ -169,7 +169,7 @@ gdb_select (int n, fd_set *readfds, fd_s
        HANDLE fd_h;
        struct serial *scb;
-      if (!FD_ISSET (fd, readfds) && !FD_ISSET (fd, writefds))
+      if (!FD_ISSET (fd, readfds) && !(writefds && FD_ISSET (fd,  
writefds)))
         continue;
        if (FD_ISSET (fd, readfds))

--
Masaki Muranaka
Monami software



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Crashed cross gdb/MinGW host
  2006-05-19 10:45 [patch] Crashed cross gdb/MinGW host Masaki Muranaka
@ 2006-05-19 20:46 ` Christopher Faylor
  2006-05-20  1:14   ` Masaki Muranaka
  2006-06-10 18:25   ` Daniel Jacobowitz
  0 siblings, 2 replies; 6+ messages in thread
From: Christopher Faylor @ 2006-05-19 20:46 UTC (permalink / raw)
  To: Masaki Muranaka, gdb-patches

On Fri, May 19, 2006 at 06:47:04PM +0900, Masaki Muranaka wrote:
>My sh-elf-gdb on MinGW host was crashed when I tried to debug using the
>serial connection.  Here is a patch.
>
>It's possible the another plan to remove writefds check.  There is no
>support yet for writefds.

If this is truly supposed to be an emulation of the system select(), I
think it would make sense to check both !readfds and !writefds.

cgf


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Crashed cross gdb/MinGW host
  2006-05-19 20:46 ` Christopher Faylor
@ 2006-05-20  1:14   ` Masaki Muranaka
  2006-06-10 18:25   ` Daniel Jacobowitz
  1 sibling, 0 replies; 6+ messages in thread
From: Masaki Muranaka @ 2006-05-20  1:14 UTC (permalink / raw)
  To: gdb-patches; +Cc: Christopher Faylor


On 2006/05/20, at 3:52, Christopher Faylor wrote:
> If this is truly supposed to be an emulation of the system select(), I
> think it would make sense to check both !readfds and !writefds.

If someone want truly emulation, he/she shuold write
the code around writefds, too.

That patch is just enough to avoid crash.
It seems there is no path readfds becomes NULL in HEAD branch.

--
Masaki Muranaka
Monami software



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Crashed cross gdb/MinGW host
  2006-05-19 20:46 ` Christopher Faylor
  2006-05-20  1:14   ` Masaki Muranaka
@ 2006-06-10 18:25   ` Daniel Jacobowitz
  2006-06-10 20:41     ` Christopher Faylor
  2006-06-11 10:00     ` Masaki Muranaka
  1 sibling, 2 replies; 6+ messages in thread
From: Daniel Jacobowitz @ 2006-06-10 18:25 UTC (permalink / raw)
  To: Masaki Muranaka, gdb-patches

On Fri, May 19, 2006 at 02:52:57PM -0400, Christopher Faylor wrote:
> On Fri, May 19, 2006 at 06:47:04PM +0900, Masaki Muranaka wrote:
> >My sh-elf-gdb on MinGW host was crashed when I tried to debug using the
> >serial connection.  Here is a patch.
> >
> >It's possible the another plan to remove writefds check.  There is no
> >support yet for writefds.
> 
> If this is truly supposed to be an emulation of the system select(), I
> think it would make sense to check both !readfds and !writefds.

Sorry for letting this sit so long.  I just encountered this bug today. 
I think I tested console and pipe when I last touched this code
but failed to test ser-base.

The underlying problem is actually different.  The code looks like
this:
      if (!FD_ISSET (fd, readfds) && !FD_ISSET (fd, writefds))
        continue;

      if (FD_ISSET (fd, readfds))
	...

      if (FD_ISSET (fd, exceptfds))
	...

See the mismatch? :-(

I have committed the attached patch as obvious.  It adds the missing
NULL checks, and also corrects the loop check for exceptfds.

-- 
Daniel Jacobowitz
CodeSourcery

2006-06-10  Daniel Jacobowitz  <dan@codesourcery.com>

	* mingw-hdep.c (gdb_select): Always check for NULL fd sets
	before calling FD_ISSET.  Correct check for exceptfds which
	previously tested writefds.

Index: mingw-hdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mingw-hdep.c,v
retrieving revision 1.3
diff -u -p -r1.3 mingw-hdep.c
--- mingw-hdep.c	24 Apr 2006 21:00:13 -0000	1.3
+++ mingw-hdep.c	10 Jun 2006 16:37:55 -0000
@@ -105,8 +105,8 @@ gdb_select (int n, fd_set *readfds, fd_s
 	 if something starts using it.  */
       gdb_assert (!writefds || !FD_ISSET (fd, writefds));
 
-      if (!FD_ISSET (fd, readfds)
-	  && !FD_ISSET (fd, exceptfds))
+      if ((!readfds || !FD_ISSET (fd, readfds))
+	  && (!exceptfds || !FD_ISSET (fd, exceptfds)))
 	continue;
       h = (HANDLE) _get_osfhandle (fd);
 
@@ -124,13 +124,13 @@ gdb_select (int n, fd_set *readfds, fd_s
 	  except = never_handle;
 	}
 
-      if (FD_ISSET (fd, readfds))
+      if (readfds && FD_ISSET (fd, readfds))
 	{
 	  gdb_assert (num_handles < MAXIMUM_WAIT_OBJECTS);
 	  handles[num_handles++] = read;
 	}
 
-      if (FD_ISSET (fd, exceptfds))
+      if (exceptfds && FD_ISSET (fd, exceptfds))
 	{
 	  gdb_assert (num_handles < MAXIMUM_WAIT_OBJECTS);
 	  handles[num_handles++] = except;
@@ -169,10 +169,11 @@ gdb_select (int n, fd_set *readfds, fd_s
       HANDLE fd_h;
       struct serial *scb;
 
-      if (!FD_ISSET (fd, readfds) && !FD_ISSET (fd, writefds))
+      if ((!readfds || !FD_ISSET (fd, readfds))
+	  && (!exceptfds || !FD_ISSET (fd, exceptfds)))
 	continue;
 
-      if (FD_ISSET (fd, readfds))
+      if (readfds && FD_ISSET (fd, readfds))
 	{
 	  fd_h = handles[indx++];
 	  /* This handle might be ready, even though it wasn't the handle
@@ -183,7 +184,7 @@ gdb_select (int n, fd_set *readfds, fd_s
 	    num_ready++;
 	}
 
-      if (FD_ISSET (fd, exceptfds))
+      if (exceptfds && FD_ISSET (fd, exceptfds))
 	{
 	  fd_h = handles[indx++];
 	  /* This handle might be ready, even though it wasn't the handle


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Crashed cross gdb/MinGW host
  2006-06-10 18:25   ` Daniel Jacobowitz
@ 2006-06-10 20:41     ` Christopher Faylor
  2006-06-11 10:00     ` Masaki Muranaka
  1 sibling, 0 replies; 6+ messages in thread
From: Christopher Faylor @ 2006-06-10 20:41 UTC (permalink / raw)
  To: Masaki Muranaka, gdb-patches

On Sat, Jun 10, 2006 at 02:25:07PM -0400, Daniel Jacobowitz wrote:
>On Fri, May 19, 2006 at 02:52:57PM -0400, Christopher Faylor wrote:
>> On Fri, May 19, 2006 at 06:47:04PM +0900, Masaki Muranaka wrote:
>> >My sh-elf-gdb on MinGW host was crashed when I tried to debug using the
>> >serial connection.  Here is a patch.
>> >
>> >It's possible the another plan to remove writefds check.  There is no
>> >support yet for writefds.
>> 
>> If this is truly supposed to be an emulation of the system select(), I
>> think it would make sense to check both !readfds and !writefds.
>
>Sorry for letting this sit so long.  I just encountered this bug today. 
>I think I tested console and pipe when I last touched this code
>but failed to test ser-base.
>
>The underlying problem is actually different.  The code looks like
>this:
>      if (!FD_ISSET (fd, readfds) && !FD_ISSET (fd, writefds))
>        continue;
>
>      if (FD_ISSET (fd, readfds))
>	...
>
>      if (FD_ISSET (fd, exceptfds))
>	...
>
>See the mismatch? :-(

I saw it and was wondering about it.  I'm glad to see consistency restored.

:-)

cgf


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Crashed cross gdb/MinGW host
  2006-06-10 18:25   ` Daniel Jacobowitz
  2006-06-10 20:41     ` Christopher Faylor
@ 2006-06-11 10:00     ` Masaki Muranaka
  1 sibling, 0 replies; 6+ messages in thread
From: Masaki Muranaka @ 2006-06-11 10:00 UTC (permalink / raw)
  To: gdb-patches; +Cc: Daniel Jacobowitz


On 2006/06/11, at 3:25, Daniel Jacobowitz wrote:
> The underlying problem is actually different.  The code looks like
> this:
(snip)
> See the mismatch? :-(

At that time, I didn't check consistency.
I think your fix is correct.

In mainline, it seems there is no path which become
readfs == NULL | expectfds == NULL.
So it might we have no need to check NULL.
(Of course, sanity checks are always agreeable.)

Thanks for your fix.


--
Masaki Muranaka
Monami software



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-06-11 10:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-19 10:45 [patch] Crashed cross gdb/MinGW host Masaki Muranaka
2006-05-19 20:46 ` Christopher Faylor
2006-05-20  1:14   ` Masaki Muranaka
2006-06-10 18:25   ` Daniel Jacobowitz
2006-06-10 20:41     ` Christopher Faylor
2006-06-11 10:00     ` Masaki Muranaka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox