Subject: port-i386/488: pcvt can lose keyboard control if you start an X server from an xterm
To: None <gnats-admin@sun-lamp.cs.berkeley.edu>
From: John Kohl <jtk@kolvir.blrc.ma.us>
List: netbsd-bugs
Date: 09/18/1994 19:20:03
>Number: 488
>Category: port-i386
>Synopsis: pcvt can lose keyboard control if you start an X server from an xterm
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: gnats-admin (GNATS administrator)
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Sep 18 19:20:02 1994
>Originator: John Kohl
>Organization:
>Release: NetBSD-1.0_BETA
>Environment:
System: NetBSD kolvir 1.0_BETA NetBSD 1.0_BETA (KOLVIR) #16: Thu Sep 15 22:03:20 EDT 1994 jtk@kolvir:/u1/NetBSD-1.0/src/sys/arch/i386/compile/KOLVIR i386
>Description:
I think I tracked down the problem I had on NetBSD-current/i386 with
pcvt and losing keyboard control to a fresh X server trying to grab the
graphics mode on the same virtual console as an existing server.
>How-To-Repeat:
I didn't have problems when I ran 'xinit -- :1' from another virtual
console; only when I ran it _from within an xterm_ did I have problems.
>Fix:
Here's a patch which seems to fix the immediate problem; it makes the
VT_SETMODE fail if something tries to set process mode on the same VT as
an active process. However, this doesn't mean that "xinit -- vtY :1"
will start an X server on vtY--the context at the time of the VT_PROCESS
may still be the current virtual console if the existing X server
doesn't yield before the new one tries to set VT_PROCESS mode. Maybe
there's some missing handshake on the console switch completing.
==John
*** 1.1 1994/08/05 01:39:53
--- pcvt_ext.c 1994/08/07 02:55:52
***************
*** 2297,2302 ****
--- 2297,2306 ----
#endif /* PCVT_FAKE_SYSCONS10 */
case VT_SETMODE:
+ if (vsp->smode.mode == VT_PROCESS &&
+ ((struct vt_mode *)data)->mode == VT_PROCESS &&
+ vsp->proc != p)
+ return EBUSY; /* already in use on this VT */
vsp->smode = *(struct vt_mode *)data;
if(vsp->smode.mode == VT_PROCESS) {
vsp->proc = p;
>Audit-Trail:
>Unformatted: