Messages in this thread | | | Subject | Re: [PATCH] vt: vt_ioctl: Add new ioctl to read vt switch lock state | From | Jiri Slaby <> | Date | Sun, 26 Apr 2020 09:08:33 +0200 |
| |
On 26. 04. 20, 1:14, Johannes Hostert wrote: > The existing ioctls VT_LOCKSWITCH and VT_UNLOCKSWITCH can be used to > allow/disallow switching the virtual terminal. However, no mechanism > exists that allows software to read this lock state. > > Userspace programs that try to switch to another virtual terminal > like chvt have no mechanism to figure out whether they will be able > to actually switch the terminal. When eg. chvt is run while terminal > switching is disabled, it simply sleeps forever waiting for the target > terminal to become active. > > This commit introduces a new ioctl VT_GETLOCKSWITCH that allows > reading the current state of the switch lock flag. Userspace > software can then use that flag and handle not being able to switch > virtual terminals. > > Example program using this: > > #include <linux/vt.h> > #include <sys/ioctl.h> > #include <fcntl.h> > #include <stdio.h> > #include <errno.h> > #include <error.h> > #include <unistd.h> > const char* console_device = "/dev/tty0"; > int main(int argc, char* argv[]) { > int fd; > while ((fd = open(console_device, O_RDWR)) == -1 && errno == EINTR); > if (fd < 0) > error(1, errno, "Opening %s", console_device); > int ret; > while ((ret = ioctl(fd, VT_GETLOCKSWITCH, 1)) == -1 && errno == EINTR); > if (ret == -1) > error(1, errno, "%s: VT_GETLOCKSWITCH", console_device);
And now if you do VT_LOCKSWITCH even when VT_GETLOCKSWITCH returns 0, vt_dont_switch can be 1 already.
So NACK.
Please don't add another racy ioctl. Introduce VT_LOCKSWITCH_NONBLOCK or something like that instead (like respecting O_NONBLOCK).
thanks, -- js suse labs
| |