diff options
author | crupest <crupest@outlook.com> | 2024-06-24 00:06:25 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2024-06-25 00:12:29 +0800 |
commit | 807c1dfe8a897f9c61bf3549ff2566917b53023b (patch) | |
tree | 8f0bfed314747ff570fa99577e8954060194ed7f /src/common/io | |
parent | 2f5651cd1a1efb136179cdbcb3b29ed0cc11ca2a (diff) | |
download | cru-807c1dfe8a897f9c61bf3549ff2566917b53023b.tar.gz cru-807c1dfe8a897f9c61bf3549ff2566917b53023b.tar.bz2 cru-807c1dfe8a897f9c61bf3549ff2566917b53023b.zip |
feat: fix linux build, complete PosixSpawnSubProcess.
NEED TEST: BufferStream, AutoReadStream, SubProcess.
Diffstat (limited to 'src/common/io')
-rw-r--r-- | src/common/io/AutoReadStream.cpp | 9 | ||||
-rw-r--r-- | src/common/io/BufferStream.cpp | 4 | ||||
-rw-r--r-- | src/common/io/Stream.cpp | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/common/io/AutoReadStream.cpp b/src/common/io/AutoReadStream.cpp index bc43fa81..bee944a5 100644 --- a/src/common/io/AutoReadStream.cpp +++ b/src/common/io/AutoReadStream.cpp @@ -9,7 +9,9 @@ AutoReadStream::AutoReadStream(Stream* stream, bool auto_delete, stream_ = stream; size_per_read_ = buffer_stream_options.GetBlockSizeOrDefault(); buffer_stream_ = std::make_unique<BufferStream>(buffer_stream_options); - background_thread_ = std::thread(&AutoReadStream::BackgroundThreadRun, this); + auto background_thread = + std::thread(&AutoReadStream::BackgroundThreadRun, this); + background_thread.detach(); } AutoReadStream::~AutoReadStream() { @@ -43,10 +45,15 @@ void AutoReadStream::Flush() { stream_->Flush(); } void AutoReadStream::Close() { stream_->Close(); } void AutoReadStream::BackgroundThreadRun() { + auto resolver = CreateResolver(); std::vector<std::byte> buffer(size_per_read_); while (true) { try { auto read = stream_->Read(buffer.data(), buffer.size()); + auto self = resolver.Resolve(); + if (!self) { + break; + } if (read == 0) { buffer_stream_->SetEof(); break; diff --git a/src/common/io/BufferStream.cpp b/src/common/io/BufferStream.cpp index 3060a608..242396cd 100644 --- a/src/common/io/BufferStream.cpp +++ b/src/common/io/BufferStream.cpp @@ -75,6 +75,10 @@ Index BufferStream::Write(const std::byte* buffer, Index offset, Index size) { Index written = 0; + if (empty) { + buffer_list_.push_back(Buffer(block_size_)); + } + while (true) { if (buffer_list_.back().GetBackFree() == 0) { if (max_block_count_ > 0 && buffer_list_.size() == max_block_count_) { diff --git a/src/common/io/Stream.cpp b/src/common/io/Stream.cpp index b2a67a18..97cfcf99 100644 --- a/src/common/io/Stream.cpp +++ b/src/common/io/Stream.cpp @@ -62,6 +62,7 @@ Buffer Stream::ReadToEnd(Index grow_size) { Buffer buffer(grow_size); while (true) { auto read = Read(buffer.GetUsedEndPtr(), buffer.GetBackFree()); + buffer.PushBackCount(read); if (read == 0) { break; } |