Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP id AA216 ; Fri, 29 Jan 93 16:00:48 EST Newsgroups: comp.unix.bsd Path: sserve!manuel.anu.edu.au!munnari.oz.au!sgiblab!spool.mu.edu!yale.edu!newsserver.jvnc.net!gmd.de!borneo.gmd.de!veit From: veit@borneo.gmd.de (Holger Veit) Subject: Re: [386bsd] X broken with new patchkit ? Message-ID: <1993Jan28.091650.29630@gmd.de> Sender: news@gmd.de (USENET News) Nntp-Posting-Host: fanoe Organization: GMD References: <4374@wzv.win.tue.nl> Date: Thu, 28 Jan 1993 09:16:50 GMT Lines: 158 In article <4374@wzv.win.tue.nl>, guido@gvr.win.tue.nl (Guido van Rooij) writes: |> I installed the new patchkit a few days ago. I also had keycap-0.1.1 (codrv) |> installed. This used to work fine, but now that I've installed the new |> patchkit, the keyboard isn't functioning quite well anymore when using X. |> Symptoms are that after pressing a key you have to wiat several seconds |> for the key to become visible on your xterm UNLESS you move your mouse.. |> then the char immediately shows up. Anyone having the same behaviour? |> |> |> -Guido I already replied to you by email, but this seems to be a more general issue. The patchkit has (at least one) builtin incompatibility regarding the behaviour of select(2). In the patchkit there is a change in the kernel that lets select wait on a process's pid rather than a pointer to its struct proc. This is actually a patch which should be 386bsd-0.2 stuff, and shouldn't have gone into the patchkit. Anyway, since codrv aka keycap has a select stub, there are necessary changes (see below). Andrew Chernov (ache@astral.msk.su) was so kind to prepare a fix for this, before I did, and sent it to me; the following patch should fix the problem (ONLY IF YOU HAVE PATCHKIT-2 INSTALLED!!!) The below patch is the only fix added to the last BUGLIST.151292 at /usr/src/sys.extras/veit-console at ref.tfs.com, the actual version is BUGLIST.270193. Holger ----CUT HERE--- BUG 15: There are problems with the new patchkit-0.2. FIX 15: The latest patchkit-0.2 introduces an incompatibility regarding the interpretation of the wait argument for selections. It does no longer use struct *proc, but the pid_t instead. The following patch kindly prepared by Andrew A. Chernow (ache@astral.msk.su) will fix this. This will be default in the next version of codrv. DON'T APPLY THIS PATCH IF YOU DON'T HAVE THE NEW PATCHKIT!!! *** co_hdr.h.sel Sun Nov 22 18:35:19 1992 --- co_hdr.h Wed Jan 27 16:21:51 1993 *************** *** 122,128 **** int cs_timo; /* timeouts since interrupt (unused) */ u_long cs_wedgecnt; /* times restarted (unused)*/ u_long cs_ovfl; /* buffer overflows */ ! struct proc *cs_selp; /* Process waiting for select call */ int cs_pgid; /* Process group for ASYNC I/O */ /*XXX*/ struct tty *cs_constty; /* used to restore constty if */ /* anyone dares to steal CONSOLE during raw open */ --- 122,128 ---- int cs_timo; /* timeouts since interrupt (unused) */ u_long cs_wedgecnt; /* times restarted (unused)*/ u_long cs_ovfl; /* buffer overflows */ ! pid_t cs_rsel; /* Process waiting for select call */ int cs_pgid; /* Process group for ASYNC I/O */ /*XXX*/ struct tty *cs_constty; /* used to restore constty if */ /* anyone dares to steal CONSOLE during raw open */ *** co_kbd.c.sel Wed Jan 27 15:23:03 1993 --- co_kbd.c Wed Jan 27 16:31:57 1993 *************** *** 138,144 **** initrb(&co_buf); /* signal opening process only */ ! consoftc.cs_selp = 0; consoftc.cs_pgid = p->p_pid; return 0; --- 138,144 ---- initrb(&co_buf); /* signal opening process only */ ! consoftc.cs_rsel = 0; consoftc.cs_pgid = p->p_pid; return 0; *************** *** 156,162 **** if (minor(dev)==0x80) return 0; consoftc.cs_flags &= ~(CO_OPENRAW|CO_ASYNC); ! consoftc.cs_selp = 0; consoftc.cs_pgid = 0; /* do we need to restore console? --- 156,162 ---- if (minor(dev)==0x80) return 0; consoftc.cs_flags &= ~(CO_OPENRAW|CO_ASYNC); ! consoftc.cs_rsel = 0; consoftc.cs_pgid = 0; /* do we need to restore console? *************** *** 277,285 **** if (!(consoftc.cs_flags & CO_OPENRAW)) return; ! if (consoftc.cs_selp) { ! selwakeup(consoftc.cs_selp,0); ! consoftc.cs_selp = 0; } if (consoftc.cs_flags & CO_ASYNC) { if (consoftc.cs_pgid < 0) --- 277,285 ---- if (!(consoftc.cs_flags & CO_OPENRAW)) return; ! if (consoftc.cs_rsel) { ! selwakeup(consoftc.cs_rsel,0); ! consoftc.cs_rsel = 0; } if (consoftc.cs_flags & CO_ASYNC) { if (consoftc.cs_pgid < 0) *************** *** 306,312 **** splx(s); return 1; } ! consoftc.cs_selp = p; } splx(s); return 0; --- 306,312 ---- splx(s); return 1; } ! consoftc.cs_rsel = p->p_pid; } splx(s); return 0; *************** *** 1182,1188 **** consoftc.cs_flags |= CO_OPENRAW; ofl = 0; } ! consoftc.cs_selp = 0; break; case KBDRESET8042: doreset(); --- 1182,1188 ---- consoftc.cs_flags |= CO_OPENRAW; ofl = 0; } ! consoftc.cs_rsel = 0; break; case KBDRESET8042: doreset(); ---CUT HERE--- -- Dr. Holger Veit | INTERNET: veit@fanoe.gmd.de | | / GMD-SET German National Research | Phone: (+49) 2241 14 2448 |__| / Center for Computer Science | Fax: (+49) 2241 14 2342 | | / P.O. Box 13 16 | Three lines Signature space | |/ Schloss Birlinghoven | available for rent. Nearly DW-5205 St. Augustin, Germany | unused, good conditions