On Fri, Feb 07, 2025 at 03:00:08PM +0300, Sergey Bugaev wrote:
> On Fri, Feb 7, 2025 at 2:36 PM Zhaoming Luo <zhming...@163.com> wrote:
> > Hi,
> 
> Hi,
> 
> > Thread 4 hit Breakpoint 1, __GI___select (nfds=0, readfds=0x103cc20, 
> > writefds=0x103cc40, exceptfds=0x103cc60, timeout=0x103cc84)
> >     at ../sysdeps/mach/hurd/select.c:31
> > ```
> >
> > When I continue, it hangs at mach_msg[0]:
> >
> > gdb backtrace:
> > ```
> > #0  0x011a206c in __GI___mach_msg_trap () at 
> > ./build-tree/hurd-i386-libc/mach/mach_msg_trap.S:2
> > #1  0x011a2800 in __GI___mach_msg (msg=0x103cad4, option=1282, send_size=0, 
> > rcv_size=40, rcv_name=13, timeout=50000, notify=0)
> 
> So, there is a timeout passed to select, and the same timeout was
> forwarded to mach_msg, it all seems to make sense?
> 
> > If my comprehension is correct, nfds == 0 means that no descriptor needs
> > to be tested:
> >
> > From POSIX:
> > ```
> > The nfds argument specifies the range of descriptors to be tested. The 
> > first nfds descriptors shall be checked in each set; that is, the 
> > descriptors from zero through nfds-1 in the descriptor sets shall be 
> > examined.
> > ```
> >
> > So probably we should directly return from hurd_select when nfds == 0?
> 
> "If the readfds, writefds, and errorfds arguments are all null
> pointers and the timeout argument is not a null pointer, select()
> blocks for the time specified, or until interrupted by a signal. If
> the readfds, writefds, and errorfds arguments are all null pointers
> and the timeout argument is a null pointer, select() blocks until
> interrupted by a signal."
> 
Thanks for the remind. I supposed `the readfds, writefds, and errorfds
arguments are all null` means readfds == writefds == errorfds == NULL.
So it will block the program for a period of time.

Zhaoming


Reply via email to