← Commit list

18d6fc1a5

Denis Vlasenko
Denis Vlasenko
2007-03-08
FAILED Duration: 12s

Subject

less: yet another attempt to make search better

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

miscutils/less.c+17 -1
@@ -21,6 +21,8 @@
* redirected input has been read from stdin
*/
+#include <sched.h> /* sched_yield() */
+
#include "busybox.h"
#if ENABLE_FEATURE_LESS_REGEXP
#include "xregex.h"
@@ -200,16 +202,30 @@ static void read_lines(void)
char c;
/* if no unprocessed chars left, eat more */
if (readpos >= readeof) {
+ smallint yielded = 0;
+
ndelay_on(0);
+ read_again:
eof_error = safe_read(0, readbuf, sizeof(readbuf));
- ndelay_off(0);
readpos = 0;
readeof = eof_error;
if (eof_error < 0) {
+ if (errno == EAGAIN && !yielded) {
+ /* We can hit EAGAIN while searching for regexp match.
+ * Yield is not 100% reliable solution in general,
+ * but for less it should be good enough.
+ * We give stdin supplier some CPU time to produce more.
+ * We do it just once. */
+ sched_yield();
+ yielded = 1;
+ goto read_again;
+ }
readeof = 0;
if (errno != EAGAIN)
print_statusline("read error");
}
+ ndelay_off(0);
+
if (eof_error <= 0) {
goto reached_eof;
}