Fixed a crash

This commit is contained in:
WolverinDEV 2021-01-04 19:45:48 +01:00
parent 3c0c48c00c
commit a233915064
3 changed files with 12 additions and 7 deletions

View File

@ -19,6 +19,7 @@ Buffer* transfer::allocate_buffer(size_t size) {
auto buffer = (Buffer*) malloc(total_size);
new (buffer) Buffer{};
buffer->capacity = size;
buffer->ref_count = 1;
return buffer;
}

View File

@ -492,13 +492,14 @@ void LocalFileTransfer::execute_disk_io(const std::shared_ptr<FileClient> &clien
assert(client->disk_buffer.bytes >= written);
client->disk_buffer.bytes -= written;
buffer_left_size = client->disk_buffer.bytes;
/* We have to deref the buffer twice since we've removed it from the list which owns us one reference */
/* Will not trigger a memory free since we're still holding onto one reference */
deref_buffer(buffer);
} else {
/* The buffer got removed */
}
}
/* We have to deref the buffer twice since we've removed it from the list which owns us one reference */
deref_buffer(buffer);
} else {
std::lock_guard block{client->disk_buffer.mutex};
if(client->disk_buffer.buffer_head == buffer) {

View File

@ -801,17 +801,20 @@ void LocalFileTransfer::callback_transfer_network_write(int fd, short events, vo
std::lock_guard block{transfer->network_buffer.mutex};
if(transfer->network_buffer.buffer_head == buffer) {
transfer->network_buffer.buffer_head = buffer->next;
if(!buffer->next)
if(!buffer->next) {
transfer->network_buffer.buffer_tail = &transfer->network_buffer.buffer_head;
}
assert(transfer->network_buffer.bytes >= written);
transfer->network_buffer.bytes -= written;
buffer_left_size = transfer->network_buffer.bytes;
/* Will not trigger a memory free since we're still holding onto one reference */
deref_buffer(buffer);
} else {
/* the buffer got remove */
}
}
deref_buffer(buffer);
} else {
std::lock_guard block{transfer->network_buffer.mutex};
if(transfer->network_buffer.buffer_head == buffer) {
@ -819,7 +822,7 @@ void LocalFileTransfer::callback_transfer_network_write(int fd, short events, vo
transfer->network_buffer.bytes -= written;
buffer_left_size = transfer->network_buffer.bytes;
} else {
/* the buffer got remove */
/* the buffer got removed */
}
}