Skip to content

Commit 3ec91db

Browse files
committed
FIX | bugs using assert()
1 parent ed2e5eb commit 3ec91db

File tree

10 files changed

+84
-93
lines changed

10 files changed

+84
-93
lines changed

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ OPTION(MANAPIHTTP_OPENSSL_SYSTEM_DISABLE "Disable default OpenSSL" OFF)
4444
OPTION(MANAPIHTTP_CURL_SYSTEM_DISABLE "Disable default cURL" OFF)
4545
OPTION(MANAPIHTTP_NGHTTP2_SYSTEM_DISABLE "Disable default nghttp2" OFF)
4646
OPTION(MANAPIHTTP_NGHTTP3_SYSTEM_DISABLE "Disable default nghttp3" OFF)
47+
OPTION(MANAPIHTTP_DISABLE_TRACE "Disable Trace Debug" OFF)
48+
OPTION(MANAPIHTTP_DISABLE_TRACE_HARD "Disable Trace Hard Debug" OFF)
49+
OPTION(MANAPIHTTP_NGHTTP3_SYSTEM_DISABLE "Disable default nghttp3" OFF)
4750
OPTION(MANAPIHTTP_DEPENDENCY_FETCH_OUTPUT "Output Directory For Libraries" OFF)
4851
OPTION(MANAPIHTTP_BUILD_TYPE "Build result: binary or library" "lib")
4952
OPTION(MANAPIHTTP_INSTALL_ARCH "/x86_64-linux-gnu for example" "")
@@ -71,6 +74,14 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
7174
add_compile_definitions(MANAPIHTTP_HTTP_BUILD_DEBUG)
7275
endif ()
7376

77+
78+
if (MANAPIHTTP_DISABLE_TRACE)
79+
add_compile_definitions(MANAPIHTTP_DISABLE_TRACE)
80+
add_compile_definitions(MANAPIHTTP_DISABLE_TRACE_HARD)
81+
elseif (MANAPIHTTP_DISABLE_TRACE_HARD)
82+
add_compile_definitions(MANAPIHTTP_DISABLE_TRACE_HARD)
83+
endif ()
84+
7485
if (MANAPIHTTP_BUILD_METHOD STREQUAL "conan")
7586
message(STATUS "Build method: conan")
7687

include/ManapiDebug.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ namespace manapi::debug {
1818
LOG_TRACE_NONE = 0,
1919
LOG_TRACE_HIGH,
2020
LOG_TRACE_MEDIUM,
21-
LOG_TRACE_LOW
21+
LOG_TRACE_LOW,
22+
LOG_TRACE_HARD
2223
} trace_level;
2324

2425
static const char* level_strings[] = {
@@ -43,6 +44,7 @@ namespace manapi::debug {
4344

4445
// Convenience macros
4546
#define manapi_log_trace(...) manapi::debug::log_log(manapi::debug::LOG_TRACE, __FILE__, __LINE__, __VA_ARGS__)
47+
#define manapi_log_trace_hard(...) manapi::debug::log_log(manapi::debug::LOG_TRACE, __FILE__, __LINE__, manapi::debug::LOG_TRACE_HARD, __VA_ARGS__)
4648
#define manapi_log_debug(...) manapi::debug::log_log(manapi::debug::LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
4749
#define manapi_log_info(...) manapi::debug::log_log(manapi::debug::LOG_INFO, __FILE__, __LINE__, __VA_ARGS__)
4850
#define manapi_log_warn(...) manapi::debug::log_log(manapi::debug::LOG_WARN, __FILE__, __LINE__, __VA_ARGS__)

src/async/ManapiAsyncContext.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,9 @@ void manapi::async::context::run(shared_ctx ctx, std::function<void(std::functio
215215

216216
void manapi::async::context::threadpoolfs(std::size_t cnt) MANAPIHTTP_NOEXCEPT {
217217
auto s = std::to_string(cnt);
218-
assert(!uv_os_setenv("UV_THREADPOOL_SIZE", s.data()));
218+
if (auto rhs = uv_os_setenv("UV_THREADPOOL_SIZE", s.data())) {
219+
manapi_log_trace("%s failed due to %s", "ctx:set UV_THREADPOOL_SIZE", ev::strerror(rhs));
220+
}
219221
}
220222

221223
std::unique_ptr<manapi::sigset_t> manapi::async::context::blockedsignals() MANAPIHTTP_NOEXCEPT {

src/async/ManapiAsyncSocket.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ void pio_ready (manapi::socket_t fd, int flags, manapi::ev::io_cb cb, const mana
5454
if (cancellation.contains_cancel_callback()) {
5555
cancellation.cancel_callback([w, resolve] () mutable
5656
-> void {
57-
assert(!w->stop());
57+
auto res_stop = w->stop();
58+
assert(!res_stop);
5859
manapi::async::current()->eventloop()->stop_watcher(w);
5960
resolve (manapi::sys_error::status_cancelled("socket i/o operation has been cancelled"));
6061
});

src/include/ManapiUtils.hpp

Lines changed: 12 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -58,71 +58,16 @@ namespace manapi::memory {
5858
}
5959
}
6060

61+
#if MANAPIHTTP_DISABLE_TRACE
62+
# ifdef manapi_log_trace
63+
# #undef manapi_log_trace
64+
# define manapi_log_trace(...)
65+
# endif
66+
#endif
6167

62-
// namespace manapi::stl {
63-
// /*
64-
// * Useful allocator alias
65-
// */
66-
// template<typename T>
67-
// using basic_allocator = ::jemallocator::jemallocator<T, jemallocator::jepolicy::empty::policy>;
68-
//
69-
// template<typename T>
70-
// using default_allocator = basic_allocator<T>;
71-
//
72-
// /*
73-
// * Useful container aliases
74-
// */
75-
//
76-
// template<typename T, class Alloc = default_allocator<T>>
77-
// using forward_list = std::forward_list<T, Alloc>;
78-
//
79-
// template<typename T, class Alloc = default_allocator<T>>
80-
// using deque = std::deque<T, Alloc>;
81-
//
82-
// template<typename T, class Alloc = default_allocator<T>>
83-
// using list = std::list<T, Alloc>;
84-
//
85-
// template<typename T, class Alloc = default_allocator<T>>
86-
// using vector = std::vector<T, Alloc>;
87-
//
88-
// template<typename Key, typename T, class Alloc = default_allocator<std::pair<const Key, T>>>
89-
// using map = std::map<Key, T, std::less<Key>, Alloc>;
90-
//
91-
// template<typename Key, typename T, class Alloc = default_allocator<std::pair<const Key, T>>>
92-
// using multimap = std::multimap<Key, T, std::less<Key>, Alloc>;
93-
//
94-
// template<typename T, class Alloc = default_allocator<T>>
95-
// using multiset = std::multiset<T, std::less<T>, Alloc>;
96-
//
97-
// template<typename T, class Alloc = default_allocator<T>>
98-
// using set = std::set<T, std::less<T>, Alloc>;
99-
//
100-
// template<typename Key, typename T, class Alloc = default_allocator<std::pair<const Key, T>>>
101-
// using unordered_map = std::unordered_map<Key, T, std::hash<Key>, std::equal_to<Key>, Alloc>;
102-
//
103-
// template<typename Key, typename T, class Alloc = default_allocator<std::pair<const Key, T>>>
104-
// using unordered_multimap = std::unordered_multimap<Key, T, std::hash<Key>, std::equal_to<Key>, Alloc>;
105-
//
106-
// template<typename Key, class Alloc = default_allocator<Key>>
107-
// using unordered_multiset = std::unordered_multiset<Key, std::hash<Key>, std::equal_to<Key>, Alloc>;
108-
//
109-
// template<typename Key, class Alloc = default_allocator<Key>>
110-
// using unordered_set = std::unordered_set<Key, std::hash<Key>, std::equal_to<Key>, Alloc>;
111-
//
112-
// template<typename T, class Alloc = default_allocator<T>>
113-
// using stack = std::stack<T, Alloc>;
114-
//
115-
// template<typename T, class Alloc = default_allocator<T>>
116-
// using queue = std::queue<T, Alloc>;
117-
//
118-
// template<typename T, class Alloc = default_allocator<T>>
119-
// using priority_queue = std::priority_queue<T, std::vector<T, Alloc>, std::less<typename std::vector<T, Alloc>::value_type>>;
120-
//
121-
// template<typename T, class Alloc = default_allocator<T>>
122-
// using basic_string = std::basic_string<T, std::char_traits<T>, Alloc>;
123-
//
124-
// using string = basic_string<char>;
125-
// using wstring = basic_string<wchar_t>;
126-
// using u16string = basic_string<char16_t>;
127-
// using u32string = basic_string<char32_t>;
128-
// }
68+
#if MANAPIHTTP_DISABLE_TRACE_HARD
69+
# ifdef manapi_log_trace_hard
70+
# #undef manapi_log_trace_hard
71+
# define manapi_log_trace_hard(...)
72+
# endif
73+
#endif

src/services/ManapiEventLoop.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#if MANAPIHTTP_CURL_DEPENDENCY
66
# include <curl/curl.h>
7+
static_assert(manapi::ev::READ == CURL_POLL_IN && manapi::ev::WRITE == CURL_POLL_OUT, "need for review");
78
#endif
89

910
#if MANAPIHTTP_CPPTRACE_DEPENDENCY
@@ -1172,6 +1173,7 @@ manapi::sys_error::status_or<std::shared_ptr<manapi::ev::io>> manapi::event_loop
11721173
return sys_error::status_resource_exhausted();
11731174
}
11741175
}
1176+
11751177
manapi::socket_t manapi::event_loop::handle_curl_open_socket(void *cbp, int socktype, void *addr) {
11761178
auto data = static_cast<event_loop *>(cbp);
11771179

src/worker/ManapiBaseUtils.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ void manapi::net::worker::prepared::top_buffer_clear(connection_prepared_t *s) M
131131
s->top->send.deque_current = 0;
132132
s->top->send.deque_cursor = 0;
133133
s->top->send.last_deque = nullptr;
134+
s->top->cur_send_size = 0;
134135
s->top->send_size = 0;
135136
}
136137
}
@@ -215,13 +216,22 @@ bool manapi::net::worker::prepared::buffs_is_full(connection_io_part *s, std::si
215216
if (!stack_size)
216217
return true;
217218

218-
return size > stack_size
219-
|| (size == stack_size && s->last_deque->buffer.size() == s->deque_cursor);
219+
if (size > stack_size)
220+
return true;
221+
222+
if (size == stack_size) {
223+
assert(s->last_deque);
224+
225+
if (s->last_deque->buffer.size() == s->deque_cursor)
226+
return true;
227+
}
228+
229+
return false;
220230
}
221231

222232
bool manapi::net::worker::prepared::write_buffs_is_full(connection_io *s, std::size_t stack_size) MANAPIHTTP_NOEXCEPT {
223233
assert(s);
224-
return prepared::buffs_is_full(&s->send, s->send_size, stack_size);
234+
return prepared::buffs_is_full(&s->send, s->cur_send_size, stack_size);
225235
}
226236

227237
bool manapi::net::worker::prepared::write_buffs_is_full(connection_io *s, http::config *config) MANAPIHTTP_NOEXCEPT {

src/worker/ManapiBaseWorker.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ void manapi::net::worker::base::connection_io_merge(connection_io_part *dest, co
281281
src->deque_current = 0;
282282

283283
if (src->deque.get() != src->last_deque) {
284-
assert(src->deque->buffer.resize(size).ok());
284+
auto res = src->deque->buffer.resize(size).ok();
285+
assert(res);
285286
}
286287
}
287288

@@ -295,14 +296,16 @@ void manapi::net::worker::base::connection_io_merge(connection_io_part *dest, co
295296
}
296297
else {
297298
dest->deque_cursor = src->deque_cursor;
298-
assert(obj->buffer.resize(src->deque_cursor).ok());
299+
auto res = obj->buffer.resize(src->deque_cursor).ok();
300+
assert(res);
299301
src->last_deque = nullptr;
300302
src->deque_cursor = 0;
301303
}
302304

303305
if (dest->last_deque) {
304306
if (dest->last_deque->buffer.size() != prev_deque_cursor) {
305-
assert(dest->last_deque->buffer.resize(prev_deque_cursor).ok());
307+
auto res = dest->last_deque->buffer.resize(prev_deque_cursor).ok();
308+
assert(res);
306309
}
307310
dest->last_deque->next = std::move(obj);
308311
dest->last_deque = dest->last_deque->next.get();
@@ -327,7 +330,8 @@ ssize_t manapi::net::worker::base::connection_io_send(connection_io_part *top, c
327330
if (top->last_deque) {
328331
auto const payload_size = top->last_deque->buffer.size() + top->last_deque->buffer.shift();
329332
if (top->last_deque->buffer.realsize() != payload_size) {
330-
assert(top->last_deque->buffer.resize(top->last_deque->buffer.realsize() - top->last_deque->buffer.shift()).ok());
333+
auto resize_res = top->last_deque->buffer.resize(top->last_deque->buffer.realsize() - top->last_deque->buffer.shift());
334+
assert(resize_res.ok());
331335
continue;
332336
}
333337
}
@@ -410,7 +414,8 @@ int manapi::net::worker::base::connection_io_send_start(connection_io_part *top,
410414
top->last_deque = top->deque.get();
411415
top->deque_current = 0;
412416
top->deque_cursor = static_cast<int>(top->deque->buffer.size());
413-
assert(top->deque->buffer.realresize(top->deque->buffer.realsize()).ok());
417+
auto resize_res = top->deque->buffer.realresize(top->deque->buffer.realsize());
418+
assert(resize_res.ok());
414419
(*cnt)++;
415420
}
416421
return ERR_OK;

src/worker/ManapiTcp.cpp

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,33 +110,33 @@ manapi::future<manapi::error::status> manapi::net::worker::TCP::init(std::size_t
110110
if (this->local->ai_family == ev::IPv4) {
111111
rhs = this->watcher_accept_->ip4_addr(this->config_->address.data(), std::stoi(this->config_->port), reinterpret_cast<sockaddr_in *>(&this->sockaddrin));
112112
if (rhs) {
113-
manapi::async::current()->logger()->error(manapi::logger::default_service, ERR_FAILED_PRECONDITION, "couldn't set ipv4 addr due to result - {}", rhs);
113+
manapi_log_error("tcp:couldn't set ipv4 addr due to result: %s", ev::strerror(rhs));
114114
co_return error::status_internal("tcp:ip4_addr failed");
115115
}
116116
}
117117
else if (this->local->ai_family == ev::IPv6) {
118118
rhs = this->watcher_accept_->ip6_addr(this->config_->address.data(), std::stoi(this->config_->port), reinterpret_cast<sockaddr_in6 *>(&this->sockaddrin));
119119
if (rhs) {
120-
manapi::async::current()->logger()->error(manapi::logger::default_service, ERR_FAILED_PRECONDITION, "couldn't set ipv6 addr due to result - {}", rhs);
120+
manapi_log_error("tcp:couldn't set ipv6 addr due to result: %s", ev::strerror(rhs));
121121
co_return error::status_internal("tcp:ip6_addr failed");
122122
}
123123
}
124124

125125
rhs = this->watcher_accept_->nodelay(this->config_->tcp_no_delay);
126126
if (rhs) {
127-
manapi::async::current()->logger()->error(logger::default_service, ERR_FAILED_PRECONDITION, "couldn't set nodelay due to result - {}", rhs);
127+
manapi_log_error("tcp:couldn't set nodelay due to result: %s", ev::strerror(rhs));
128128
co_return error::status_internal("tcp:nodelay failed");
129129
}
130130

131131
rhs = this->watcher_accept_->simultaneous_accepts(this->config_->simultaneous_accepts);
132132
if (rhs) {
133-
manapi::async::current()->logger()->error(logger::default_service, ERR_FAILED_PRECONDITION, "couldn't set simultaneous_accepts due to result - {}", rhs);
133+
manapi_log_error ("tcp:couldn't set simultaneous_accepts due to result:%s",ev::strerror(rhs));
134134
co_return error::status_internal("tcp:simultaneous_accepts failed");
135135
}
136136

137137
rhs = this->watcher_accept_->keepalive(!!this->config_->keep_alive, this->config_->keep_alive);
138138
if (rhs) {
139-
manapi::async::current()->logger()->error(logger::default_service, ERR_FAILED_PRECONDITION, "couldn't set keep-alive due to result - {}", rhs);
139+
manapi_log_error("tcp:couldn't set keep-alive due to result:%s", rhs);
140140
co_return error::status_internal("tcp:keepalive failed");
141141
}
142142

@@ -147,14 +147,14 @@ manapi::future<manapi::error::status> manapi::net::worker::TCP::init(std::size_t
147147
#endif
148148
rhs = this->watcher_accept_->s_bind(reinterpret_cast<sockaddr *> (&this->sockaddrin), bind_flags);
149149
if (rhs) {
150-
manapi::async::current()->logger()->error(logger::default_service, ERR_FAILED_PRECONDITION, "couldn't bind socket due to result - {} {}", rhs, uv_err_name (rhs));
150+
manapi_log_error("tcp:couldn't bind socket due to result:%s", ev::strerror(rhs));
151151
co_return error::status_internal("tcp:s_bind failed");
152152
}
153153
}
154154

155155
rhs = this->watcher_accept_->listen(this->config_->tcp_backlog);
156156
if (rhs) {
157-
manapi::async::current()->logger()->error(logger::default_service, ERR_FAILED_PRECONDITION, "couldn't listen socket due to result - {}", rhs);
157+
manapi_log_error("tcp:couldn't listen socket due to result:%s", ev::strerror(rhs));
158158
co_return error::status_internal("tcp:listen failed");
159159
}
160160

@@ -185,6 +185,7 @@ void manapi::net::worker::TCP::onaccept(const std::shared_ptr<ev::tcp> &watcher,
185185
connection = this->accept(watcher);
186186

187187
if (!connection) {
188+
manapi_log_trace(manapi::debug::LOG_TRACE_LOW, "%s:%s failed", "tcp", "new_connection");
188189
return;
189190
}
190191

@@ -202,6 +203,8 @@ void manapi::net::worker::TCP::onrecv(const std::shared_ptr<ev::tcp> &watcher, c
202203
auto const connection = conn->as<tcp_connection_t>();
203204
auto const size = static_cast<int>(buffer.size());
204205

206+
manapi_log_trace_hard("tcp:recv conn=%p data=%p size=%zu", conn.get(), buffer.data(), buffer.size());
207+
205208
connection->transfered += size;
206209
if (connection->transfered >= this->config_->speed_limit_rate) {
207210
this->read_stop_(connection);
@@ -287,7 +290,8 @@ manapi::net::worker::shared_conn manapi::net::worker::TCP::accept (const ev::sha
287290
}
288291

289292

290-
assert(object.resize(nread).ok());
293+
auto resize_res = object.resize(nread);
294+
assert(resize_res.ok());
291295

292296
this->onrecv(w, connection, std::move(object));
293297
}
@@ -359,8 +363,9 @@ manapi::net::worker::shared_conn manapi::net::worker::TCP::accept (const ev::sha
359363
connection->wrk.flags |= WRK_INTERFACE_CONN_RETRY;
360364
}
361365

362-
assert((it.insert({reinterpret_cast<uintptr_t>(connection.get()),
363-
connection}).second));
366+
auto res = it.insert({reinterpret_cast<uintptr_t>(connection.get()),
367+
connection});
368+
assert((res.second));
364369
}
365370
catch (std::exception const &e) {
366371
manapi_log_error("tcp accept: failed due to %s", e.what());
@@ -370,6 +375,7 @@ manapi::net::worker::shared_conn manapi::net::worker::TCP::accept (const ev::sha
370375

371376
return std::move(connection);
372377
err:
378+
manapi_log_trace(manapi::debug::LOG_TRACE_LOW, "%s:%s failed", "tcp", "accept");
373379
if (connection) {
374380
auto it = this->ips.find(arr);
375381
if (it != this->ips.end())
@@ -644,14 +650,18 @@ void manapi::net::worker::TCP::read_start_(tcp_connection_t *data) MANAPIHTTP_NO
644650
if (!data->watcher || data->watcher->is_active() || data->transfered > this->config_->speed_limit_rate)
645651
return;
646652
manapi_log_trace(debug::LOG_TRACE_LOW, "TCP:%p read_start()", data);
647-
assert(!data->watcher->read_start());
653+
auto res = data->watcher->read_start();
654+
if (res)
655+
manapi_log_error("%s failed due to %s", "tcp:read_start", ev::strerror(res));
648656
}
649657

650658
void manapi::net::worker::TCP::read_stop_(tcp_connection_t *data) MANAPIHTTP_NOEXCEPT {
651659
if (!data->watcher || !data->watcher->is_active())
652660
return;
653661
manapi_log_trace(debug::LOG_TRACE_LOW, "TCP:%p read_stop()", data);
654-
assert(!data->watcher->read_stop());
662+
auto res = data->watcher->read_stop();
663+
if (res)
664+
manapi_log_error("%s failed due to %s", "tcp:read_stop", ev::strerror(res));
655665
}
656666

657667
int manapi::net::worker::TCP::flush_write_(const worker::shared_conn &connection, bool flush) MANAPIHTTP_NOEXCEPT {
@@ -675,7 +685,8 @@ int manapi::net::worker::TCP::flush_write_(const worker::shared_conn &connection
675685

676686
if (current == conn->top->send.last_deque) {
677687
conn->top->send.last_deque = nullptr;
678-
assert(object.resize(conn->top->send.deque_cursor).ok());
688+
auto resize_res = object.resize(conn->top->send.deque_cursor);
689+
assert(resize_res.ok());
679690
conn->top->send.deque_cursor = 0;
680691
}
681692

@@ -793,7 +804,8 @@ int manapi::net::worker::TCP::flush_write_(const worker::shared_conn &connection
793804
else {
794805
conn->top->send.last_deque = current;
795806
conn->top->send.deque_cursor = conn->top->send.last_deque->buffer.size();
796-
assert(conn->top->send.last_deque->buffer.resize(current->buffer.realsize() - current->buffer.shift()).ok());
807+
auto resize_res = conn->top->send.last_deque->buffer.resize(current->buffer.realsize() - current->buffer.shift());
808+
assert(resize_res.ok());
797809
}
798810

799811
conn->top->send.deque = std::move(sent);

0 commit comments

Comments
 (0)