Skip to content

Commit fda84dd

Browse files
committed
FIX | wait async task on error
1 parent 9926310 commit fda84dd

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

include/std/ManapiAsyncParallelRun.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ namespace manapi::async {
1515
if (this->flags)
1616
reinterpret_cast<T *> (this->value)->~T();
1717

18-
this->flags = 1;
1918
new (this->value) T (co_await task);
19+
this->flags = 1;
20+
2021
co_return manapi::error::status_ok();
2122
}
2223
catch (std::exception const &e) {
@@ -102,10 +103,7 @@ namespace manapi::async {
102103
requires(!std::is_same_v<T1, void>)
103104
MANAPIHTTP_NODISCARD manapi::future<T1> get_or (T1 v) const;
104105

105-
template<typename T1 = T>
106-
requires(!std::is_same_v<T1, void>)
107106
MANAPIHTTP_NODISCARD bool some () const MANAPIHTTP_NOEXCEPT;
108-
//manapi::future<void> async_run_with_prepare(std::move_only_function<manapi::future<T>()> task, std::move_only_function<void()> cb);
109107
private:
110108
std::shared_ptr<data_t> data;
111109
};
@@ -192,7 +190,6 @@ namespace manapi::async {
192190
}
193191

194192
template<typename T>
195-
template<typename T1> requires (!std::is_same_v<T1, void>)
196193
bool parallel_run<T>::some() const MANAPIHTTP_NOEXCEPT {
197194
return this->data->value.some();
198195
}

src/http/ManapiBaseHttp.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1270,7 +1270,10 @@ manapi::future<void> manapi::net::http::internal::send_file(std::unique_ptr<resp
12701270
manapi_log_trace(debug::LOG_TRACE_MEDIUM, "send_file() %p failed due to %s", cdata->conn.get(), e.what());
12711271
}
12721272

1273-
err: //co_await parallel.get_or(0);
1273+
err:
1274+
if (parallel.some()) {
1275+
co_await parallel.get_or(0);
1276+
}
12741277
co_return;
12751278
}
12761279

src/worker/ManapiTlsOverTcp.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ void manapi::net::worker::TLS::onrecv(const std::shared_ptr<ev::tcp> &watcher, c
469469
auto buff = buffer.as<char>();
470470
auto size = static_cast<ssize_t>(buffer.size());
471471
auto const data = conn->as<tls_connection_t>();
472+
int rhs = 0;
472473

473474
data->transfered += size;
474475
if (data->transfered >= this->config_->speed_limit_rate) {
@@ -478,10 +479,9 @@ void manapi::net::worker::TLS::onrecv(const std::shared_ptr<ev::tcp> &watcher, c
478479
manapi_log_trace_hard("TLS:recv %p flags=%d size=%zu", conn.get(), data->flags, buffer.size());
479480

480481
while (size) {
481-
auto rhs = this->ssl_bio_write_(data->rbio, buff, static_cast<int>(size));
482+
rhs = this->ssl_bio_write_(data->rbio, buff, static_cast<int>(size));
482483
if (rhs <= 0) {
483484
/* error */
484-
data->flags |= ev::DISCONNECT;
485485
goto err;
486486
}
487487

@@ -490,9 +490,7 @@ void manapi::net::worker::TLS::onrecv(const std::shared_ptr<ev::tcp> &watcher, c
490490

491491
/* TODO: resolve this dump logic */
492492

493-
if (data->flags & CONN_TLS_SHUTDOWN) {
494-
assert(!(data->flags & CONN_CLOSED));
495-
}
493+
assert(!(data->flags & CONN_TLS_SHUTDOWN) || !(data->flags & CONN_CLOSED));
496494

497495
while (!(data->flags & CONN_CLOSED)) {
498496
if (ssl_is_init_fininshed_(data->ssl)) {
@@ -582,20 +580,25 @@ void manapi::net::worker::TLS::onrecv(const std::shared_ptr<ev::tcp> &watcher, c
582580
goto err;
583581
}
584582

585-
if(this->check_read_stack_full_(conn, data)) {
583+
if (this->check_read_stack_full_(conn, data)) {
586584
goto err;
587585
}
588586

589587
return;
590588

591589
err: {
592-
auto const cdata = conn->as<tls_connection_t>();
593-
594590
conn->cancellation.cancel();
595591

596-
this->close_connection(conn, CLOSE_CONN_SHUTDOWN);
592+
int flags;
597593

598-
return;
594+
if (rhs < 0) {
595+
flags = CLOSE_CONN_EOS;
596+
}
597+
else {
598+
flags = CLOSE_CONN_ERR;
599+
}
600+
601+
this->close_connection(conn, flags);
599602
}
600603
}
601604

0 commit comments

Comments
 (0)