From d33402221625f2602be016480f2c6fe3e48672b9 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sat, 16 Feb 2008 16:40:03 +0000 Subject: [PATCH] fixes to mapped storage --- src/mapped_storage.cpp | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/mapped_storage.cpp b/src/mapped_storage.cpp index 9e1721eb2..e80b48661 100644 --- a/src/mapped_storage.cpp +++ b/src/mapped_storage.cpp @@ -187,7 +187,7 @@ namespace libtorrent } } - if (m_files.size() >= m_size && min != m_files.end()) + if (int(m_files.size()) >= m_size && min != m_files.end()) { TORRENT_ASSERT(min->references == 0); min->file.close(); @@ -264,6 +264,10 @@ namespace libtorrent TORRENT_ASSERT(offset < m_info->piece_size(slot)); TORRENT_ASSERT(size > 0); + size_type result = -1; + try + { + #ifndef NDEBUG std::vector slices = m_info->map_block(slot, offset, size, true); @@ -290,7 +294,7 @@ namespace libtorrent m_save_path / file_iter->path, std::ios::in , file_offset + file_iter->file_base, size, this , file_iter->size + file_iter->file_base); - + if (!view.valid()) { m_error = "failed to open file '"; @@ -298,11 +302,11 @@ namespace libtorrent m_error += "'for reading"; return -1; } + TORRENT_ASSERT(view.const_addr() != 0); int left_to_read = size; - int slot_size = static_cast(m_info->piece_size(slot)); int buf_pos = 0; - size_type result = left_to_read; + result = left_to_read; #ifndef NDEBUG int counter = 0; #endif @@ -349,6 +353,7 @@ namespace libtorrent fs::path path = m_save_path / file_iter->path; file_offset = 0; + view = m_pool.open_file(path, std::ios::in, file_offset + file_iter->file_base , left_to_read, this , file_iter->size + file_iter->file_base); @@ -360,8 +365,16 @@ namespace libtorrent m_error += "'for reading"; return -1; } + TORRENT_ASSERT(view.const_addr() != 0); } } + } + catch (std::exception& e) + { + m_error = e.what(); + return -1; + } + return result; } @@ -395,6 +408,9 @@ namespace libtorrent } TORRENT_ASSERT(file_iter->size > 0); + try + { + mapped_file_pool::file_view view = m_pool.open_file( m_save_path / file_iter->path, std::ios::in | std::ios::out , file_offset + file_iter->file_base, size, this @@ -407,9 +423,9 @@ namespace libtorrent m_error += "'for writing"; return -1; } + TORRENT_ASSERT(view.addr() != 0); int left_to_write = size; - int slot_size = static_cast(m_info->piece_size(slot)); int buf_pos = 0; #ifndef NDEBUG int counter = 0; @@ -466,8 +482,15 @@ namespace libtorrent m_error += "'for reading"; return -1; } + TORRENT_ASSERT(view.addr() != 0); } } + } + catch (std::exception& e) + { + m_error = e.what(); + return -1; + } return size; }