mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 08:52:44 +00:00 
			
		
		
		
	Implement a basic way for read() to block.
FileHandle gets a hasDataAvailableForRead() getter. If this returns true in sys$read(), the task will block(BlockedRead) + yield. The fd blocked on is stored in Task::m_fdBlockedOnRead. The scheduler then looks at the state of that fd during the unblock phase. This makes "sh" restful. :^) There's still some problem with the kernel not surviving the colonel task getting scheduled. I need to figure that out and fix it.
This commit is contained in:
		
							parent
							
								
									ba56f4afde
								
							
						
					
					
						commit
						c6f2890d8e
					
				
					 18 changed files with 86 additions and 17 deletions
				
			
		|  | @ -5,9 +5,10 @@ | |||
| class RandomDevice final : public CharacterDevice { | ||||
| public: | ||||
|     RandomDevice(); | ||||
|     virtual ~RandomDevice(); | ||||
|     virtual ~RandomDevice() override; | ||||
| 
 | ||||
|     Unix::ssize_t read(byte* buffer, Unix::size_t bufferSize) override; | ||||
|     Unix::ssize_t write(const byte* buffer, Unix::size_t bufferSize) override; | ||||
|     virtual Unix::ssize_t read(byte* buffer, Unix::size_t bufferSize) override; | ||||
|     virtual Unix::ssize_t write(const byte* buffer, Unix::size_t bufferSize) override; | ||||
|     virtual bool hasDataAvailableForRead() const override; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling