void disk_buffer_pool::free_buffer(char* buf) { mutex::scoped_lock l(m_pool_mutex); free_buffer_impl(buf, l); check_buffer_level(l); }
void disk_buffer_pool::free_buffer(char* buf) { std::unique_lock<std::mutex> l(m_pool_mutex); TORRENT_ASSERT(is_disk_buffer(buf, l)); free_buffer_impl(buf, l); remove_buffer_in_use(buf); check_buffer_level(l); }
void disk_buffer_pool::free_iovec(file::iovec_t* iov, int iov_len) { // TODO: perhaps we should sort the buffers here? mutex::scoped_lock l(m_pool_mutex); for (int i = 0; i < iov_len; ++i) free_buffer_impl(static_cast<char*>(iov[i].iov_base), l); check_buffer_level(l); }
void disk_buffer_pool::free_iovec(span<iovec_t const> iov) { // TODO: perhaps we should sort the buffers here? std::unique_lock<std::mutex> l(m_pool_mutex); for (auto i : iov) { char* buf = i.data(); TORRENT_ASSERT(is_disk_buffer(buf, l)); free_buffer_impl(buf, l); remove_buffer_in_use(buf); } check_buffer_level(l); }
void disk_buffer_pool::free_multiple_buffers(span<char*> bufvec) { // sort the pointers in order to maximize cache hits std::sort(bufvec.begin(), bufvec.end()); std::unique_lock<std::mutex> l(m_pool_mutex); for (char* buf : bufvec) { TORRENT_ASSERT(is_disk_buffer(buf, l)); free_buffer_impl(buf, l); remove_buffer_in_use(buf); } check_buffer_level(l); }
void disk_buffer_pool::free_multiple_buffers(char** bufvec, int numbufs) { char** end = bufvec + numbufs; // sort the pointers in order to maximize cache hits std::sort(bufvec, end); mutex::scoped_lock l(m_pool_mutex); for (; bufvec != end; ++bufvec) { char* buf = *bufvec; TORRENT_ASSERT(buf); free_buffer_impl(buf, l); } check_buffer_level(l); }