parent
91ed5aeafc
commit
b2f696ae6e
@ -0,0 +1,43 @@
|
|||||||
|
From 704e4ce6c334dcf5db1fe9af22eabd335cebb775 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aleix Pol <aleixpol@kde.org>
|
||||||
|
Date: Fri, 25 Feb 2022 03:02:40 +0100
|
||||||
|
Subject: [PATCH] VirtualTerminal: do not ignore EINTR when activating
|
||||||
|
|
||||||
|
EINTR can be called at any time when a signal is received but here we
|
||||||
|
still need to follow through with both ioctl() calls.
|
||||||
|
|
||||||
|
This change is inspired by how xserver does more or less the same thing.
|
||||||
|
---
|
||||||
|
src/common/VirtualTerminal.cpp | 15 ++++++++++++---
|
||||||
|
1 file changed, 12 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/common/VirtualTerminal.cpp b/src/common/VirtualTerminal.cpp
|
||||||
|
index e1330af..7791caf 100644
|
||||||
|
--- a/src/common/VirtualTerminal.cpp
|
||||||
|
+++ b/src/common/VirtualTerminal.cpp
|
||||||
|
@@ -211,10 +211,19 @@ out:
|
||||||
|
if (!vt_auto)
|
||||||
|
handleVtSwitches(fd);
|
||||||
|
|
||||||
|
- if (ioctl(fd, VT_ACTIVATE, vt) < 0)
|
||||||
|
+ int ret;
|
||||||
|
+ while ((ret = ioctl(fd, VT_ACTIVATE, vt) < 0) && errno == EINTR)
|
||||||
|
+ {}
|
||||||
|
+
|
||||||
|
+ if (ret < 0)
|
||||||
|
qWarning("Couldn't initiate jump to VT %d: %s", vt, strerror(errno));
|
||||||
|
- else if (ioctl(fd, VT_WAITACTIVE, vt) < 0)
|
||||||
|
- qWarning("Couldn't finalize jump to VT %d: %s", vt, strerror(errno));
|
||||||
|
+ else {
|
||||||
|
+ while ((ret = ioctl(fd, VT_WAITACTIVE, vt) < 0) && errno == EINTR)
|
||||||
|
+ {}
|
||||||
|
+
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ qWarning("Couldn't finalize jump to VT %d: %s", vt, strerror(errno));
|
||||||
|
+ }
|
||||||
|
|
||||||
|
close(activeVtFd);
|
||||||
|
if (vtFd != -1)
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
Loading…
Reference in new issue