mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Trying to fix memory leak.
This commit is contained in:
parent
60bf9991b4
commit
79f759049b
|
@ -161,19 +161,9 @@ static inline void tox_array_pop(tox_array *arr, uint32_t num)
|
||||||
arr->data = realloc(arr->data, arr->elem_size*arr->len);
|
arr->data = realloc(arr->data, arr->elem_size*arr->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: do not use type, since we track the needed info in
|
/* TODO: return ptr and do not take type */
|
||||||
* elem_size (but array user will have to cast)
|
|
||||||
*/
|
|
||||||
#define tox_array_get(arr, i, type) (((type*)(arr)->data)[i])
|
#define tox_array_get(arr, i, type) (((type*)(arr)->data)[i])
|
||||||
|
|
||||||
/* This version requires C99 (declaring variables inside for loop)
|
|
||||||
#define tox_array_for_each(arr, type, tmp_name) \
|
|
||||||
for ( \
|
|
||||||
struct { type val; uint32_t i; } tmp_name = { tox_array_get(arr, 0, type), 0 }; \
|
|
||||||
tmp_name.i != (arr)->len; \
|
|
||||||
tmp_name.val = tox_array_get(arr, ++tmp_name.i, type) \
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define tox_array_for_each(arr, type, tmp_name) \
|
#define tox_array_for_each(arr, type, tmp_name) \
|
||||||
type tmp_name; uint32_t tmp_name ## _i = 0; \
|
type tmp_name; uint32_t tmp_name ## _i = 0; \
|
||||||
|
|
|
@ -206,11 +206,13 @@ int incoming_connection(Lossless_UDP *ludp)
|
||||||
*/
|
*/
|
||||||
int kill_connection(Lossless_UDP *ludp, int connection_id)
|
int kill_connection(Lossless_UDP *ludp, int connection_id)
|
||||||
{
|
{
|
||||||
|
Connection* connection = &tox_array_get(&ludp->connections, connection_id, Connection);
|
||||||
|
|
||||||
if (connection_id >= 0 && connection_id < ludp->connections.len) {
|
if (connection_id >= 0 && connection_id < ludp->connections.len) {
|
||||||
if (tox_array_get(&ludp->connections, connection_id, Connection).status > 0) {
|
if (connection->status > 0) {
|
||||||
tox_array_get(&ludp->connections, connection_id, Connection).status = 0;
|
connection->status = 0;
|
||||||
change_handshake(ludp, tox_array_get(&ludp->connections, connection_id, Connection).ip_port);
|
change_handshake(ludp, connection->ip_port);
|
||||||
tox_array_pop(&ludp->connections, 0);
|
memset(connection, 0, sizeof(Connection));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -320,9 +322,8 @@ int write_packet(Lossless_UDP *ludp, int connection_id, uint8_t *data, uint32_t
|
||||||
if (length > MAX_DATA_SIZE || length == 0)
|
if (length > MAX_DATA_SIZE || length == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Connection *connection = &tox_array_get(&ludp->connections, connection_id, Connection);
|
|
||||||
|
|
||||||
if (sendqueue(ludp, connection_id) < BUFFER_PACKET_NUM) {
|
if (sendqueue(ludp, connection_id) < BUFFER_PACKET_NUM) {
|
||||||
|
Connection *connection = &tox_array_get(&ludp->connections, connection_id, Connection);
|
||||||
uint32_t index = connection->sendbuff_packetnum % MAX_QUEUE_NUM;
|
uint32_t index = connection->sendbuff_packetnum % MAX_QUEUE_NUM;
|
||||||
memcpy(connection->sendbuffer[index].data, data, length);
|
memcpy(connection->sendbuffer[index].data, data, length);
|
||||||
connection->sendbuffer[index].size = length;
|
connection->sendbuffer[index].size = length;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user