bug-hurd
[Top][All Lists]
Advanced

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

Re: vim testsuite: Test_keep_pty_open V2


From: Zhaoming Luo
Subject: Re: vim testsuite: Test_keep_pty_open V2
Date: Sat, 8 Feb 2025 12:51:04 +0800

On Sat, Feb 08, 2025 at 08:55:31AM +0800, Zhaoming Luo wrote:
> On Fri, Feb 07, 2025 at 01:57:01PM +0100, Samuel Thibault wrote:
> > Zhaoming Luo, le ven. 07 févr. 2025 18:44:50 +0800, a ecrit:
> > > This is V2 of figuring out the issue. V1 is abandoned due to my mistake,
> > > but this time I can confirm the source of issue. This time I ran
> > > rpctrace directly on vim, and used two printfs to locate the isatty().
> > > 
> > > ```
> > > printf ("Start isatty!\n");
> > > if (mch_isatty(in))
> > >     channel->ch_to_be_closed |= (1U << PART_IN);
> > > printf ("Finish isatty!\n");
> > > ```
> > > 
> > > rpctrace output:
> > > ```
> > > ...
> > > 30<--44(pid920)->io_write_request ("Start isatty!\n" -1) = 0 14
> > > 56<--24(pid920)->term_getctty () = 0x4000002d (Operation not supported)
> > > 30<--44(pid920)->io_write_request ("Finish isatty!\n" -1) = 0 15
> > > ...
> > > ```
> > > 
> > > The error seems to be from [2].
> > 
> > Indeed, if it was plugged to another translator you'd get a mig bad id
> > error.
> > 
> > My guess is that it's cred->pi.class != tty_class that fails, indeed:
> > 
> >     int ret = openpty(&master, &slave, s, &term, &win);
> >     printf("%d\n", isatty(master));
> >     printf("%d\n", isatty(slave));
> > 
> > says 0 for master on the Hurd while it says 1 on Linux
> > 
> > The pi.class != tty_class condition was previously because of a lookup,
> > but nowadays with the protected payloads we didn't need a lookup any
> > more and it was replaced with a check that we find cred in the proper
> > place. I'd say we should also accept the class being pty_class, it
> > does not seem it would harm: in the uses of term_getctty that I can see,
> > it matches the obtained cttyid with the one of the process, or it's an
> > explicit request.
> 
> Ok, I will submit a patch so EOPNOSUPP will be returned when
> cred->pi.class != pty_class is also true.
> 

I got stuck at the patch since I'm not sure whether I should add a
condition like:

```
   if (!cred
       || cred->pi.bucket != term_bucket
-      || cred->pi.class != tty_class)
+      || (cred->pi.class != tty_class && cred->pi.class != pty_class))
     return EOPNOTSUPP;
```

Or directly remove cred->pi.class != tty_class. Please feel free to
submit the patch, I can confirm that accepting pty_class can pass the
vim test Test_keep_pty_open (and a few other tests \o/).

Zhaoming




reply via email to

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