From owner-p4-projects@FreeBSD.ORG Fri Feb 8 17:39:46 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1375116A41A; Fri, 8 Feb 2008 17:39:46 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4EC516A418 for ; Fri, 8 Feb 2008 17:39:45 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A192F13C458 for ; Fri, 8 Feb 2008 17:39:45 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m18HdjUl081912 for ; Fri, 8 Feb 2008 17:39:45 GMT (envelope-from imp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m18HdjWd081909 for perforce@freebsd.org; Fri, 8 Feb 2008 17:39:45 GMT (envelope-from imp@freebsd.org) Date: Fri, 8 Feb 2008 17:39:45 GMT Message-Id: <200802081739.m18HdjWd081909@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to imp@freebsd.org using -f From: Warner Losh To: Perforce Change Reviews Cc: Subject: PERFORCE change 135044 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Feb 2008 17:39:46 -0000 http://perforce.freebsd.org/chv.cgi?CH=135044 Change 135044 by imp@imp_lighthouse on 2008/02/08 17:38:50 Big ugly hack: disable interrupts and reenable them inside of gets. The problem is that this is called with interrupts enabled, creating a race between the UART ISR and cngetc. I'm unsure why the UART interrupts are enabled, but we're hitting it in the simulator, so use the big hammer for now. Affected files ... .. //depot/projects/mips2-jnpr/src/sys/libkern/gets.c#2 edit Differences ... ==== //depot/projects/mips2-jnpr/src/sys/libkern/gets.c#2 (text+ko) ==== @@ -31,15 +31,18 @@ #include #include #include +#include void gets(char *cp, size_t size, int visible) { char *lp, *end; int c; + register_t s; lp = cp; end = cp + size - 1; + s = intr_disable(); for (;;) { c = cngetc() & 0177; switch (c) { @@ -47,6 +50,7 @@ case '\r': printf("%c", c); *lp = '\0'; + intr_restore(s); return; case '\b': case '\177':