Fixed a crash
This commit is contained in:
parent
3c0c48c00c
commit
a233915064
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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 */
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user