mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-18 09:04:49 -04:00
[tlib][net] fix the memory leaks (#7)
* memory leak: buffer [tlib/src/net.cpp:69]: (error) Memory leak: buffer Found by https://github.com/bryongloden/cppcheck
This commit is contained in:
parent
9d5da4769d
commit
19c9d44690
@ -21,10 +21,10 @@ tlib::packet& tlib::packet::operator=(packet&& rhs) {
|
|||||||
this->fd = rhs.fd;
|
this->fd = rhs.fd;
|
||||||
this->payload = rhs.payload;
|
this->payload = rhs.payload;
|
||||||
this->index = rhs.index;
|
this->index = rhs.index;
|
||||||
|
|
||||||
rhs.payload = nullptr;
|
rhs.payload = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ std::expected<size_t> tlib::socket_open(socket_domain domain, socket_type type,
|
|||||||
: [fd] "=m"(fd)
|
: [fd] "=m"(fd)
|
||||||
: [domain] "g"(static_cast<size_t>(domain)), [type] "g"(static_cast<size_t>(type)), [protocol] "g"(static_cast<size_t>(protocol))
|
: [domain] "g"(static_cast<size_t>(domain)), [type] "g"(static_cast<size_t>(type)), [protocol] "g"(static_cast<size_t>(protocol))
|
||||||
: "rax", "rbx", "rcx", "rdx");
|
: "rax", "rbx", "rcx", "rdx");
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
return std::make_expected_from_error<size_t, size_t>(-fd);
|
return std::make_expected_from_error<size_t, size_t>(-fd);
|
||||||
} else {
|
} else {
|
||||||
@ -57,15 +57,16 @@ void tlib::socket_close(size_t fd) {
|
|||||||
|
|
||||||
std::expected<tlib::packet> tlib::prepare_packet(size_t socket_fd, void* desc) {
|
std::expected<tlib::packet> tlib::prepare_packet(size_t socket_fd, void* desc) {
|
||||||
auto buffer = malloc(2048);
|
auto buffer = malloc(2048);
|
||||||
|
|
||||||
int64_t fd;
|
int64_t fd;
|
||||||
uint64_t index;
|
uint64_t index;
|
||||||
asm volatile("mov rax, 0x3002; mov rbx, %[socket]; mov rcx, %[desc]; mov rdx, %[buffer]; int 50; mov %[fd], rax; mov %[index], rbx;"
|
asm volatile("mov rax, 0x3002; mov rbx, %[socket]; mov rcx, %[desc]; mov rdx, %[buffer]; int 50; mov %[fd], rax; mov %[index], rbx;"
|
||||||
: [fd] "=m"(fd), [index] "=m"(index)
|
: [fd] "=m"(fd), [index] "=m"(index)
|
||||||
: [socket] "g"(socket_fd), [desc] "g"(reinterpret_cast<size_t>(desc)), [buffer] "g"(reinterpret_cast<size_t>(buffer))
|
: [socket] "g"(socket_fd), [desc] "g"(reinterpret_cast<size_t>(desc)), [buffer] "g"(reinterpret_cast<size_t>(buffer))
|
||||||
: "rax", "rbx", "rcx", "rdx");
|
: "rax", "rbx", "rcx", "rdx");
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
free(buffer);
|
||||||
return std::make_expected_from_error<tlib::packet, size_t>(-fd);
|
return std::make_expected_from_error<tlib::packet, size_t>(-fd);
|
||||||
} else {
|
} else {
|
||||||
tlib::packet p;
|
tlib::packet p;
|
||||||
@ -78,13 +79,13 @@ std::expected<tlib::packet> tlib::prepare_packet(size_t socket_fd, void* desc) {
|
|||||||
|
|
||||||
std::expected<void> tlib::finalize_packet(size_t socket_fd, const tlib::packet& p) {
|
std::expected<void> tlib::finalize_packet(size_t socket_fd, const tlib::packet& p) {
|
||||||
auto packet_fd = p.fd;
|
auto packet_fd = p.fd;
|
||||||
|
|
||||||
int64_t code;
|
int64_t code;
|
||||||
asm volatile("mov rax, 0x3003; mov rbx, %[socket]; mov rcx, %[packet]; int 50; mov %[code], rax"
|
asm volatile("mov rax, 0x3003; mov rbx, %[socket]; mov rcx, %[packet]; int 50; mov %[code], rax"
|
||||||
: [code] "=m"(code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g"(socket_fd), [packet] "g"(packet_fd)
|
: [socket] "g"(socket_fd), [packet] "g"(packet_fd)
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
return std::make_expected_from_error<void, size_t>(-code);
|
return std::make_expected_from_error<void, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
@ -98,7 +99,7 @@ std::expected<void> tlib::listen(size_t socket_fd, bool l) {
|
|||||||
: [code] "=m"(code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g"(socket_fd), [listen] "g"(size_t(l))
|
: [socket] "g"(socket_fd), [listen] "g"(size_t(l))
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
return std::make_expected_from_error<void, size_t>(-code);
|
return std::make_expected_from_error<void, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
@ -112,7 +113,7 @@ std::expected<size_t> tlib::client_bind(size_t socket_fd) {
|
|||||||
: [code] "=m"(code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g"(socket_fd)
|
: [socket] "g"(socket_fd)
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
return std::make_unexpected<size_t, size_t>(-code);
|
return std::make_unexpected<size_t, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
@ -126,7 +127,7 @@ std::expected<size_t> tlib::connect(size_t socket_fd, tlib::ip::address server,
|
|||||||
: [code] "=m"(code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g" (socket_fd), [ip] "g" (size_t(server.raw_address)), [port] "g" (port)
|
: [socket] "g" (socket_fd), [ip] "g" (size_t(server.raw_address)), [port] "g" (port)
|
||||||
: "rax", "rbx", "rcx", "rdx");
|
: "rax", "rbx", "rcx", "rdx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
return std::make_unexpected<size_t, size_t>(-code);
|
return std::make_unexpected<size_t, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
@ -140,7 +141,7 @@ std::expected<void> tlib::disconnect(size_t socket_fd) {
|
|||||||
: [code] "=m"(code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g" (socket_fd)
|
: [socket] "g" (socket_fd)
|
||||||
: "rax", "rbx");
|
: "rax", "rbx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
return std::make_unexpected<void, size_t>(-code);
|
return std::make_unexpected<void, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
@ -150,14 +151,14 @@ std::expected<void> tlib::disconnect(size_t socket_fd) {
|
|||||||
|
|
||||||
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd) {
|
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd) {
|
||||||
auto buffer = malloc(2048);
|
auto buffer = malloc(2048);
|
||||||
|
|
||||||
int64_t code;
|
int64_t code;
|
||||||
uint64_t payload;
|
uint64_t payload;
|
||||||
asm volatile("mov rax, 0x3005; mov rbx, %[socket]; mov rcx, %[buffer]; int 50; mov %[code], rax; mov %[payload], rbx;"
|
asm volatile("mov rax, 0x3005; mov rbx, %[socket]; mov rcx, %[buffer]; int 50; mov %[code], rax; mov %[payload], rbx;"
|
||||||
: [payload] "=m"(payload), [code] "=m"(code)
|
: [payload] "=m"(payload), [code] "=m"(code)
|
||||||
: [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast<size_t>(buffer))
|
: [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast<size_t>(buffer))
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return std::make_expected_from_error<packet, size_t>(-code);
|
return std::make_expected_from_error<packet, size_t>(-code);
|
||||||
@ -171,14 +172,14 @@ std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd) {
|
|||||||
|
|
||||||
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd, size_t ms) {
|
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd, size_t ms) {
|
||||||
auto buffer = malloc(2048);
|
auto buffer = malloc(2048);
|
||||||
|
|
||||||
int64_t code;
|
int64_t code;
|
||||||
uint64_t payload;
|
uint64_t payload;
|
||||||
asm volatile("mov rax, 0x3006; mov rbx, %[socket]; mov rcx, %[buffer]; mov rdx, %[ms]; int 50; mov %[code], rax; mov %[payload], rbx;"
|
asm volatile("mov rax, 0x3006; mov rbx, %[socket]; mov rcx, %[buffer]; mov rdx, %[ms]; int 50; mov %[code], rax; mov %[payload], rbx;"
|
||||||
: [payload] "=m"(payload), [code] "=m"(code)
|
: [payload] "=m"(payload), [code] "=m"(code)
|
||||||
: [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast<size_t>(buffer)), [ms] "g"(ms)
|
: [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast<size_t>(buffer)), [ms] "g"(ms)
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return std::make_expected_from_error<packet, size_t>(-code);
|
return std::make_expected_from_error<packet, size_t>(-code);
|
||||||
@ -191,15 +192,15 @@ std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd, size_t ms) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tlib::socket::socket(socket_domain domain, socket_type type, socket_protocol protocol)
|
tlib::socket::socket(socket_domain domain, socket_type type, socket_protocol protocol)
|
||||||
: domain(domain), type(type), protocol(protocol), fd(0), error_code(0) {
|
: domain(domain), type(type), protocol(protocol), fd(0), error_code(0) {
|
||||||
auto open_status = tlib::socket_open(domain, type, protocol);
|
auto open_status = tlib::socket_open(domain, type, protocol);
|
||||||
|
|
||||||
if (open_status.valid()) {
|
if (open_status.valid()) {
|
||||||
fd = *open_status;
|
fd = *open_status;
|
||||||
} else {
|
} else {
|
||||||
error_code = open_status.error();
|
error_code = open_status.error();
|
||||||
}
|
}
|
||||||
|
|
||||||
local_port = 0;
|
local_port = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,7 +208,7 @@ tlib::socket::~socket() {
|
|||||||
if(connected()){
|
if(connected()){
|
||||||
disconnect();
|
disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd) {
|
if (fd) {
|
||||||
tlib::socket_close(fd);
|
tlib::socket_close(fd);
|
||||||
}
|
}
|
||||||
@ -241,7 +242,7 @@ void tlib::socket::listen(bool l) {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::listen(fd, l);
|
auto status = tlib::listen(fd, l);
|
||||||
if (!status) {
|
if (!status) {
|
||||||
error_code = status.error();
|
error_code = status.error();
|
||||||
@ -252,12 +253,12 @@ void tlib::socket::client_bind() {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::client_bind(fd);
|
auto status = tlib::client_bind(fd);
|
||||||
if (!status) {
|
if (!status) {
|
||||||
error_code = status.error();
|
error_code = status.error();
|
||||||
}
|
}
|
||||||
|
|
||||||
local_port = *status;
|
local_port = *status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +266,7 @@ void tlib::socket::connect(tlib::ip::address server, size_t port) {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::connect(fd, server, port);
|
auto status = tlib::connect(fd, server, port);
|
||||||
if (status) {
|
if (status) {
|
||||||
_connected = true;
|
_connected = true;
|
||||||
@ -279,13 +280,13 @@ void tlib::socket::disconnect() {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!connected()){
|
if(!connected()){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::disconnect(fd);
|
auto status = tlib::disconnect(fd);
|
||||||
|
|
||||||
if(status){
|
if(status){
|
||||||
_connected = false;
|
_connected = false;
|
||||||
} else {
|
} else {
|
||||||
@ -297,9 +298,9 @@ tlib::packet tlib::socket::prepare_packet(void* desc) {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto packet = tlib::prepare_packet(fd, desc);
|
auto packet = tlib::prepare_packet(fd, desc);
|
||||||
|
|
||||||
if (!packet) {
|
if (!packet) {
|
||||||
error_code = packet.error();
|
error_code = packet.error();
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
@ -312,7 +313,7 @@ void tlib::socket::finalize_packet(const tlib::packet& p) {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::finalize_packet(fd, p);
|
auto status = tlib::finalize_packet(fd, p);
|
||||||
if (!status) {
|
if (!status) {
|
||||||
error_code = status.error();
|
error_code = status.error();
|
||||||
@ -323,9 +324,9 @@ tlib::packet tlib::socket::wait_for_packet() {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto p = tlib::wait_for_packet(fd);
|
auto p = tlib::wait_for_packet(fd);
|
||||||
|
|
||||||
if (!p) {
|
if (!p) {
|
||||||
error_code = p.error();
|
error_code = p.error();
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
@ -338,9 +339,9 @@ tlib::packet tlib::socket::wait_for_packet(size_t ms) {
|
|||||||
if (!good() || !open()) {
|
if (!good() || !open()) {
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto p = tlib::wait_for_packet(fd, ms);
|
auto p = tlib::wait_for_packet(fd, ms);
|
||||||
|
|
||||||
if (!p) {
|
if (!p) {
|
||||||
error_code = p.error();
|
error_code = p.error();
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user