bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH,HURD][RFC] hurdselect: Step7x, almost complete rewrite finish


From: Samuel Thibault
Subject: Re: [PATCH,HURD][RFC] hurdselect: Step7x, almost complete rewrite finished
Date: Fri, 15 Feb 2013 19:59:22 +0100
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Svante Signell, le Fri 15 Feb 2013 10:54:44 +0100, a écrit :
> I did understand the code, but maybe the change went wrong. I would
> really appreciate if you could help me to understand what's the problem
> with the new code.
> 
> Old code: (cleaning previously allocated ports when one FD is bogus and
> exit out of the loop)
>            if (fd < _hurd_dtablesize)
>               {
> ...
>                 if (d[i].io_port != MACH_PORT_NULL)
>                   continue;
>               }

Let's call ii the value of i at this point

>             /* If one descriptor is bogus, we fail completely.  */
>             while (i-- > 0)
>               if (d[i].type != 0)
>                 _hurd_port_free (&d[i].cell->port,
>                                  &d[i].ulink, d[i].io_port);
>             break;

So it's ii-1 whose array position gets _hurd_port_free()d. array
position ii does *not* get _hurd_port_free()d, while

>                 /* If one descriptor is bogus, mark and remove it.  */
>                 if (d[i].io_port == MACH_PORT_NULL)
>                   {
>                     _hurd_port_free (&d[i].cell->port,
>                                      &d[i].ulink, d[i].io_port);
>                     continue; /* Next i */
>                   }

This does _hurd_port_free() array position ii, even if it is actually
undefined since _hurd_port_get returning MACH_PORT_NULL means it didn't
work (and thus didn't fill the array position).

Samuel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]