aboutsummaryrefslogtreecommitdiff
path: root/src/common/io
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-06-24 00:06:25 +0800
committercrupest <crupest@outlook.com>2024-06-25 00:12:29 +0800
commit807c1dfe8a897f9c61bf3549ff2566917b53023b (patch)
tree8f0bfed314747ff570fa99577e8954060194ed7f /src/common/io
parent2f5651cd1a1efb136179cdbcb3b29ed0cc11ca2a (diff)
downloadcru-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.cpp9
-rw-r--r--src/common/io/BufferStream.cpp4
-rw-r--r--src/common/io/Stream.cpp1
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;
}