cleanup - print ^U \n when user kills line - fix prflush - remove swap junk Reference: /n/atom/patch/applied2013/consctlu Date: Sun Dec 29 22:15:29 CET 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/port/devcons.c Sun Dec 29 22:14:44 2013 +++ /sys/src/nix/port/devcons.c Sun Dec 29 22:14:46 2013 @@ -79,7 +79,6 @@ static char *sysname; static vlong fasthz; -static void seedrand(void); static int readtime(ulong, char*, int); static int readbintime(char*, int); static int writetime(char*, int); @@ -212,15 +211,21 @@ return 0; } +/* must be safe to call from any context */ void prflush(void) { - ulong now; + uvlong now; - now = m->ticks; - while(consactive()) - if(m->ticks - now >= HZ) + now = µs(); + while(consactive()){ + if(µs() - now >= 1000000) break; + if(up != nil && islo()) + tsleep(&up->sleep, return0, nil, 1); + else + delay(1); + } } /* @@ -291,10 +296,8 @@ } /* - * Print a string on the console. Convert \n to \r\n for serial - * line consoles. Locking of the queues is left up to the screen - * or uart code. Multi-line messages to serial consoles may get - * interspersed with other messages. + * Print a string on the consoles. Convert \n to \r\n if necessary. + * Multi-line messages may be interspersed. */ static void putstrn0(char *str, int n, int usewrite) @@ -821,7 +824,6 @@ long offset; extern int schedsteals, scheddonates; - if(n <= 0) return n; @@ -857,6 +859,7 @@ kbd.x = i; break; case 0x15: /* ^U */ + print("\b^U\n"); kbd.x = 0; break; case '\n': @@ -1149,7 +1152,6 @@ case Qsysstat: for(i = 0; i < MACHMAX; i++) if((mp = sys->machptr[i]) != nil && mp->online != 0){ - mp = MACHP(i); mp->cs = 0; mp->intr = 0; mp->syscall = 0; @@ -1160,18 +1162,7 @@ break; case Qswap: - if(n >= sizeof buf) - error(Egreg); - memmove(buf, va, n); /* so we can NUL-terminate */ - buf[n] = 0; - if(!iseve()) - error(Eperm); - if(buf[0]<'0' || '9'