Prechádzať zdrojové kódy

immediately return from read on EOF

greatbridf 2 rokov pred
rodič
commit
71010de5b0
1 zmenil súbory, kde vykonal 5 pridanie a 2 odobranie
  1. 5 2
      src/kernel/tty.cpp

+ 5 - 2
src/kernel/tty.cpp

@@ -21,7 +21,7 @@ size_t tty::read(char* buf, size_t buf_size, size_t n)
     size_t orig_n = n;
 
     while (buf_size && n) {
-        while (this->buf.empty()) {
+        if (this->buf.empty()) {
             current_thread->attr.ready = 0;
             current_thread->attr.wait = 1;
             this->blocklist.subscribe(current_thread);
@@ -29,6 +29,9 @@ size_t tty::read(char* buf, size_t buf_size, size_t n)
             this->blocklist.unsubscribe(current_thread);
         }
 
+        if (this->buf.empty())
+            break;
+
         *buf = this->buf.get();
         --buf_size;
         --n;
@@ -118,7 +121,7 @@ void serial_tty::recvchar(char c)
         break;
     // ^D: EOF
     case 0x04:
-        console->print("EOF");
+        this->blocklist.notify();
         break;
     // ^Z: SIGSTOP
     case 0x1a: