Skip to content

Commit f1991aa

Browse files
committed
perf: Use stack allocation for strerror rendering.
1 parent 3984211 commit f1991aa

File tree

9 files changed

+82
-125
lines changed

9 files changed

+82
-125
lines changed

auto_tests/TCP_test.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,13 @@ static void test_basic(void)
111111
free(handshake_plain);
112112

113113
// Sending the handshake
114-
ck_assert_msg(net_send(ns, mem, logger, sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1,
114+
ck_assert_msg(net_send(ns, logger, sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1,
115115
&localhost, nullptr) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
116116
"An attempt to send the initial handshake minus last byte failed.");
117117

118118
do_tcp_server_delay(tcp_s, mono_time, 50);
119119

120-
ck_assert_msg(net_send(ns, mem, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost, nullptr) == 1,
120+
ck_assert_msg(net_send(ns, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost, nullptr) == 1,
121121
"The attempt to send the last byte of handshake failed.");
122122

123123
free(handshake);
@@ -127,7 +127,7 @@ static void test_basic(void)
127127
// Receiving server response and decrypting it
128128
uint8_t response[TCP_SERVER_HANDSHAKE_SIZE];
129129
uint8_t response_plain[TCP_HANDSHAKE_PLAIN_SIZE];
130-
ck_assert_msg(net_recv(ns, mem, logger, sock, response, TCP_SERVER_HANDSHAKE_SIZE, &localhost) == TCP_SERVER_HANDSHAKE_SIZE,
130+
ck_assert_msg(net_recv(ns, logger, sock, response, TCP_SERVER_HANDSHAKE_SIZE, &localhost) == TCP_SERVER_HANDSHAKE_SIZE,
131131
"Could/did not receive a server response to the initial handshake.");
132132
ret = decrypt_data(mem, self_public_key, f_secret_key, response, response + CRYPTO_NONCE_SIZE,
133133
TCP_SERVER_HANDSHAKE_SIZE - CRYPTO_NONCE_SIZE, response_plain);
@@ -156,7 +156,7 @@ static void test_basic(void)
156156
msg_length = sizeof(r_req) - i;
157157
}
158158

159-
ck_assert_msg(net_send(ns, mem, logger, sock, r_req + i, msg_length, &localhost, nullptr) == msg_length,
159+
ck_assert_msg(net_send(ns, logger, sock, r_req + i, msg_length, &localhost, nullptr) == msg_length,
160160
"Failed to send request after completing the handshake.");
161161
i += msg_length;
162162

@@ -169,7 +169,7 @@ static void test_basic(void)
169169
const size_t max_packet_size = 4096;
170170
uint8_t *packet_resp = (uint8_t *)malloc(max_packet_size);
171171
ck_assert(packet_resp != nullptr);
172-
int recv_data_len = net_recv(ns, mem, logger, sock, packet_resp, 2 + 2 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_MAC_SIZE, &localhost);
172+
int recv_data_len = net_recv(ns, logger, sock, packet_resp, 2 + 2 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_MAC_SIZE, &localhost);
173173
ck_assert_msg(recv_data_len == 2 + 2 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_MAC_SIZE,
174174
"Failed to receive server response to request. %d", recv_data_len);
175175
memcpy(&size, packet_resp, 2);
@@ -241,20 +241,20 @@ static struct sec_TCP_con *new_tcp_con(const Logger *logger, const Memory *mem,
241241
ck_assert_msg(ret == TCP_CLIENT_HANDSHAKE_SIZE - (CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE),
242242
"Failed to encrypt the outgoing handshake.");
243243

244-
ck_assert_msg(net_send(ns, mem, logger, sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1,
244+
ck_assert_msg(net_send(ns, logger, sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1,
245245
&localhost, nullptr) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
246246
"Failed to send the first portion of the handshake to the TCP relay server.");
247247

248248
do_tcp_server_delay(tcp_s, mono_time, 50);
249249

250-
ck_assert_msg(net_send(ns, mem, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost, nullptr) == 1,
250+
ck_assert_msg(net_send(ns, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost, nullptr) == 1,
251251
"Failed to send last byte of handshake.");
252252

253253
do_tcp_server_delay(tcp_s, mono_time, 50);
254254

255255
uint8_t response[TCP_SERVER_HANDSHAKE_SIZE];
256256
uint8_t response_plain[TCP_HANDSHAKE_PLAIN_SIZE];
257-
ck_assert_msg(net_recv(sec_c->ns, mem, logger, sock, response, TCP_SERVER_HANDSHAKE_SIZE, &localhost) == TCP_SERVER_HANDSHAKE_SIZE,
257+
ck_assert_msg(net_recv(sec_c->ns, logger, sock, response, TCP_SERVER_HANDSHAKE_SIZE, &localhost) == TCP_SERVER_HANDSHAKE_SIZE,
258258
"Failed to receive server handshake response.");
259259
ret = decrypt_data(mem, tcp_server_public_key(tcp_s), f_secret_key, response, response + CRYPTO_NONCE_SIZE,
260260
TCP_SERVER_HANDSHAKE_SIZE - CRYPTO_NONCE_SIZE, response_plain);
@@ -291,7 +291,7 @@ static int write_packet_tcp_test_connection(const Logger *logger, const Memory *
291291
localhost.ip = get_loopback();
292292
localhost.port = 0;
293293

294-
ck_assert_msg(net_send(con->ns, mem, logger, con->sock, packet, packet_size, &localhost, nullptr) == packet_size,
294+
ck_assert_msg(net_send(con->ns, logger, con->sock, packet, packet_size, &localhost, nullptr) == packet_size,
295295
"Failed to send a packet.");
296296
return 0;
297297
}
@@ -302,7 +302,7 @@ static int read_packet_sec_tcp(const Logger *logger, struct sec_TCP_con *con, ui
302302
localhost.ip = get_loopback();
303303
localhost.port = 0;
304304

305-
int rlen = net_recv(con->ns, con->mem, logger, con->sock, data, length, &localhost);
305+
int rlen = net_recv(con->ns, logger, con->sock, data, length, &localhost);
306306
ck_assert_msg(rlen == length, "Did not receive packet of correct length. Wanted %i, instead got %i", length, rlen);
307307
rlen = decrypt_data_symmetric(con->mem, con->shared_key, con->recv_nonce, data + 2, length - 2, data);
308308
ck_assert_msg(rlen != -1, "Failed to decrypt a received packet from the Relay server.");

auto_tests/network_test.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ static void test_addr_resolv_localhost(void)
3232
bool res = addr_resolve_or_parse_ip(ns, mem, localhost, &ip, nullptr, true);
3333

3434
int error = net_error();
35-
char *strerror = net_new_strerror(mem, error);
36-
ck_assert(strerror != nullptr);
37-
ck_assert_msg(res, "Resolver failed: %d, %s", error, strerror);
38-
net_kill_strerror(mem, strerror);
35+
Net_Strerror error_str;
36+
ck_assert_msg(res, "Resolver failed: %d, %s", error, net_strerror(error, &error_str));
3937

4038
Ip_Ntoa ip_str;
4139
ck_assert_msg(net_family_is_ipv4(ip.family), "Expected family TOX_AF_INET, got %u.", ip.family.value);
@@ -56,10 +54,7 @@ static void test_addr_resolv_localhost(void)
5654
}
5755

5856
error = net_error();
59-
strerror = net_new_strerror(mem, error);
60-
ck_assert(strerror != nullptr);
61-
ck_assert_msg(res, "Resolver failed: %d, %s", error, strerror);
62-
net_kill_strerror(mem, strerror);
57+
ck_assert_msg(res, "Resolver failed: %d, %s", error, net_strerror(error, &error_str));
6358

6459
ck_assert_msg(net_family_is_ipv6(ip.family), "Expected family TOX_AF_INET6 (%d), got %u.", TOX_AF_INET6,
6560
ip.family.value);
@@ -80,10 +75,7 @@ static void test_addr_resolv_localhost(void)
8075
ip_reset(&extra);
8176
res = addr_resolve_or_parse_ip(ns, mem, localhost, &ip, &extra, true);
8277
error = net_error();
83-
strerror = net_new_strerror(mem, error);
84-
ck_assert(strerror != nullptr);
85-
ck_assert_msg(res, "Resolver failed: %d, %s", error, strerror);
86-
net_kill_strerror(mem, strerror);
78+
ck_assert_msg(res, "Resolver failed: %d, %s", error, net_strerror(error, &error_str));
8779

8880
#if USE_IPV6
8981
ck_assert_msg(net_family_is_ipv6(ip.family), "Expected family TOX_AF_INET6 (%d), got %u.", TOX_AF_INET6,

other/docker/cppcheck/toxcore.cfg

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,6 @@
9292
<alloc init="true">new_networking_no_udp</alloc>
9393
<dealloc arg="1">kill_networking</dealloc>
9494
</resource>
95-
<resource>
96-
<alloc init="true">net_new_strerror</alloc>
97-
<dealloc arg="1">net_kill_strerror</dealloc>
98-
</resource>
9995
<resource>
10096
<alloc init="true">new_onion</alloc>
10197
<dealloc arg="1">kill_onion</dealloc>

toxav/rtp.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "../toxcore/logger.h"
1818
#include "../toxcore/mono_time.h"
1919
#include "../toxcore/net_crypto.h"
20+
#include "../toxcore/network.h"
2021
#include "../toxcore/tox_private.h"
2122
#include "../toxcore/util.h"
2223

@@ -778,11 +779,10 @@ void rtp_stop_receiving(Tox *tox)
778779
static void rtp_report_error_maybe(const Logger *log, const Memory *mem, Tox_Err_Friend_Custom_Packet error, uint16_t rdata_size)
779780
{
780781
if (error != TOX_ERR_FRIEND_CUSTOM_PACKET_OK) {
781-
char *netstrerror = net_new_strerror(mem, net_error());
782+
Net_Strerror error_str;
782783
const char *toxerror = tox_err_friend_custom_packet_to_string(error);
783784
LOGGER_WARNING(log, "RTP send failed (len: %u)! tox error: %s net error: %s",
784-
rdata_size, toxerror, netstrerror);
785-
net_kill_strerror(mem, netstrerror);
785+
rdata_size, toxerror, net_strerror(net_error(), &error_str));
786786
}
787787
}
788788

toxav/toxav.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -996,9 +996,8 @@ static Toxav_Err_Send_Frame send_frames(const ToxAV *av, ToxAVCall *call)
996996
is_keyframe);
997997

998998
if (res < 0) {
999-
char *netstrerror = net_new_strerror(av->mem, net_error());
1000-
LOGGER_WARNING(av->log, "Could not send video frame: %s", netstrerror);
1001-
net_kill_strerror(av->mem, netstrerror);
999+
Net_Strerror error_str;
1000+
LOGGER_WARNING(av->log, "Could not send video frame: %s", net_strerror(net_error(), &error_str));
10021001
return TOXAV_ERR_SEND_FRAME_RTP_FAILED;
10031002
}
10041003
}

toxcore/TCP_common.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ int send_pending_data_nonpriority(const Logger *logger, TCP_Connection *con)
3535
}
3636

3737
const uint16_t left = con->last_packet_length - con->last_packet_sent;
38-
const int len = net_send(con->ns, con->mem, logger, con->sock, con->last_packet + con->last_packet_sent, left, &con->ip_port,
38+
const int len = net_send(con->ns, logger, con->sock, con->last_packet + con->last_packet_sent, left, &con->ip_port,
3939
con->net_profile);
4040

4141
if (len <= 0) {
@@ -67,7 +67,7 @@ int send_pending_data(const Logger *logger, TCP_Connection *con)
6767

6868
while (p != nullptr) {
6969
const uint16_t left = p->size - p->sent;
70-
const int len = net_send(con->ns, con->mem, logger, con->sock, p->data + p->sent, left, &con->ip_port, con->net_profile);
70+
const int len = net_send(con->ns, logger, con->sock, p->data + p->sent, left, &con->ip_port, con->net_profile);
7171

7272
if (len != left) {
7373
if (len > 0) {
@@ -165,7 +165,7 @@ int write_packet_tcp_secure_connection(const Logger *logger, TCP_Connection *con
165165
}
166166

167167
if (priority) {
168-
len = sendpriority ? net_send(con->ns, con->mem, logger, con->sock, packet, packet_size, &con->ip_port,
168+
len = sendpriority ? net_send(con->ns, logger, con->sock, packet, packet_size, &con->ip_port,
169169
con->net_profile) : 0;
170170

171171
if (len <= 0) {
@@ -181,7 +181,7 @@ int write_packet_tcp_secure_connection(const Logger *logger, TCP_Connection *con
181181
return add_priority(con, packet, packet_size, len) ? 1 : 0;
182182
}
183183

184-
len = net_send(con->ns, con->mem, logger, con->sock, packet, packet_size, &con->ip_port, con->net_profile);
184+
len = net_send(con->ns, logger, con->sock, packet, packet_size, &con->ip_port, con->net_profile);
185185

186186
if (len <= 0) {
187187
return 0;
@@ -218,7 +218,7 @@ int read_tcp_packet(
218218
return -1;
219219
}
220220

221-
const int len = net_recv(ns, mem, logger, sock, data, length, ip_port);
221+
const int len = net_recv(ns, logger, sock, data, length, ip_port);
222222

223223
if (len != length) {
224224
LOGGER_ERROR(logger, "FAIL recv packet");
@@ -236,13 +236,13 @@ int read_tcp_packet(
236236
* return -1 on failure.
237237
*/
238238
non_null()
239-
static uint16_t read_tcp_length(const Logger *logger, const Memory *mem, const Network *ns, Socket sock, const IP_Port *ip_port)
239+
static uint16_t read_tcp_length(const Logger *logger, const Network *ns, Socket sock, const IP_Port *ip_port)
240240
{
241241
const uint16_t count = net_socket_data_recv_buffer(ns, sock);
242242

243243
if (count >= sizeof(uint16_t)) {
244244
uint8_t length_buf[sizeof(uint16_t)];
245-
const int len = net_recv(ns, mem, logger, sock, length_buf, sizeof(length_buf), ip_port);
245+
const int len = net_recv(ns, logger, sock, length_buf, sizeof(length_buf), ip_port);
246246

247247
if (len != sizeof(uint16_t)) {
248248
LOGGER_ERROR(logger, "FAIL recv packet");
@@ -275,7 +275,7 @@ int read_packet_tcp_secure_connection(
275275
uint16_t max_len, const IP_Port *ip_port)
276276
{
277277
if (*next_packet_length == 0) {
278-
const uint16_t len = read_tcp_length(logger, mem, ns, sock, ip_port);
278+
const uint16_t len = read_tcp_length(logger, ns, sock, ip_port);
279279

280280
if (len == (uint16_t) -1) {
281281
return -1;

toxcore/TCP_server.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ static int handle_tcp_handshake(const Logger *logger, TCP_Secure_Connection *con
362362

363363
const IP_Port ipp = {{{0}}};
364364

365-
if (TCP_SERVER_HANDSHAKE_SIZE != net_send(con->con.ns, con->con.mem, logger, con->con.sock, response, TCP_SERVER_HANDSHAKE_SIZE, &ipp, con->con.net_profile)) {
365+
if (TCP_SERVER_HANDSHAKE_SIZE != net_send(con->con.ns, logger, con->con.sock, response, TCP_SERVER_HANDSHAKE_SIZE, &ipp, con->con.net_profile)) {
366366
crypto_memzero(shared_key, sizeof(shared_key));
367367
return -1;
368368
}
@@ -942,10 +942,9 @@ static Socket new_listening_tcp_socket(const Logger *logger, const Memory *mem,
942942
ok = ok && bind_to_port(ns, sock, family, port) && (net_listen(ns, sock, TCP_MAX_BACKLOG) == 0);
943943

944944
if (!ok) {
945-
char *const error = net_new_strerror(mem, net_error());
945+
Net_Strerror error_str;
946946
LOGGER_WARNING(logger, "could not bind to TCP port %d (family = %d): %s",
947-
port, family.value, error != nullptr ? error : "(null)");
948-
net_kill_strerror(mem, error);
947+
port, family.value, net_strerror(net_error(), &error_str));
949948
kill_sock(ns, sock);
950949
return net_invalid_socket();
951950
}

0 commit comments

Comments
 (0)