0232dc35cd
File locking interacts poorly with the path to replace a read only file handle with a read/write one. For performance reasons the old handle is not closed until the new one is put in place. With file locking this obviously cannot work because the first handle is holding a lock on the file. As a result, file_pool::open_file fails in this case. Even if we dropped the reference to the read only file handle before attempting to re-open it, the open could still fail if another thread is holding a reference to the read only handle. There doesn't seem to be a good way around this. The simple solution would be to always open files in read/write mode, but that has obvious safety downsides. Any other solution would significantly complicate the file pool code. Deprecating file locking seems to be the least bad option. |
||
---|---|---|
.github | ||
bindings | ||
cmake/Modules | ||
docs | ||
ed25519 | ||
examples | ||
include/libtorrent | ||
m4 | ||
simulation | ||
src | ||
test | ||
tools | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
AUTHORS | ||
CMakeLists.txt | ||
CONTRIBUTING.rst | ||
COPYING | ||
ChangeLog | ||
Jamfile | ||
Jamroot.jam | ||
LICENSE | ||
Makefile.am | ||
NEWS | ||
README.rst | ||
appveyor.yml | ||
autotool.sh | ||
bootstrap.sh | ||
build_dist.sh | ||
configure.ac | ||
libtorrent-rasterbar-cmake.pc.in | ||
libtorrent-rasterbar.pc.in | ||
libtorrent-rasterbarConfig.cmake | ||
setup.py | ||
sonar-project.properties |
README.rst
libtorrent ---------- .. image:: https://travis-ci.org/arvidn/libtorrent.svg?branch=master :target: https://travis-ci.org/arvidn/libtorrent .. image:: https://ci.appveyor.com/api/projects/status/w7teauvub5813mew/branch/master?svg=true :target: https://ci.appveyor.com/project/arvidn/libtorrent/branch/master .. image:: https://codecov.io/github/arvidn/libtorrent/coverage.svg?branch=master :target: https://codecov.io/github/arvidn/libtorrent?branch=master&view=all#sort=missing&dir=desc .. image:: https://www.openhub.net/p/rasterbar-libtorrent/widgets/project_thin_badge.gif :target: https://www.openhub.net/p/rasterbar-libtorrent?ref=sample libtorrent is an open source C++ library implementing the BitTorrent protocol, along with most popular extensions, making it suitable for real world deployment. It is configurable to be able to fit both servers and embedded devices. The main goals of libtorrent are to be efficient and easy to use. See `libtorrent.org`__ for more detailed build and usage instructions. .. __: http://libtorrent.org To build with boost-build, make sure boost and boost-build is installed and run: b2 In the libtorrent root. To build the examples, run ``b2`` in the ``examples`` directory. See `building.html`__ for more details on how to build and which configuration options are available. For python bindings, see `the python docs`__. .. __: docs/building.rst .. __: docs/python_binding.rst