Commit Graph

9337 Commits

Author SHA1 Message Date
arvidn 4ae262d2d4 fix race condition in part_file 2018-06-19 14:50:02 +02:00
d-komarov 81ce7aa4ab Fix parts file i/o errors (#3110)
Since i/o operations are not synchronized, it is possible that one thread closes file handle, opened in another thread. With addition of `hidden` file attribute, an old bug in `part_file::open_file()` revealed both problems, causing a lot of random i/o errors in parts file. Fixing `open_file` bug should reduce the number of such errors back to 'normal'.
2018-06-18 14:34:39 +02:00
arvidn af686a3819 add switch to client_test to log session stats 2018-06-16 17:42:34 +02:00
arvidn 2364699292 clarify documentation for move_storage() 2018-06-11 00:05:36 +02:00
Arvid Norberg 049d867c12 fixed race condition in random number generator 2018-06-06 09:54:49 +02:00
Arvid Norberg 2408200475 fix race condition in stat_cache 2018-06-05 19:07:33 +02:00
Arvid Norberg 794ccf4f79 remove unused disk stats counters 2018-06-05 19:03:04 +02:00
arvidn 95cfc16bca fix integer overflow in alert_manager 2018-06-02 15:16:08 +02:00
arvidn c55bc7dd42 improve error handling of failing to change file priority 2018-05-31 00:47:17 +02:00
Steven Siloti 396c5dd3af remove use of deprecated function readdir_r
Ports 140b8ace onto RC_1_1 branch
2018-05-28 16:06:41 +02:00
sledgehammer_999 4cef1814b0 Add 1.1.7 release in the ChangeLog 2018-05-28 09:44:26 +02:00
Eugene Shalygin b1d7dd89c1 Reflect Boost version and C++11/14 interconnection in CMake build
C++ standard and Boost requirements are connected:
1. With C++11 onward, we require Boost system component, with
C++03 we need chrono and random components too
2. When building against boost 1.66 and newer, C++11 is required.

Closes #3011, partially closes #2966.
2018-05-27 22:59:13 +02:00
arvidn 35d7672432 raise priority of fastresum_rejected_alert 2018-05-27 22:33:24 +02:00
arvidn 6ec6c1b340 since moving an existing file into the part file isn't supported, just don't use the partfile for existing files when their priority is set to 0 2018-05-24 23:45:28 +02:00
arvidn 77191a3820 fix hidden attribute in file class 2018-05-23 10:39:10 +02:00
arvidn ed8fffc1a6 set the hidden attribute when creating the part file 2018-05-23 10:39:10 +02:00
Steven Siloti 54f00ce09d don't change state to downloading if the torrent is finished
Move the transition to downloading after the torrent has been checked
for being finished. This prevents a spurious state_changed_alert when
adding a torrent which is already completed.

Also move the posting of the torrent_checked_alert to maintain the
historical ordering of that alert with respect to the transition out of
checking_resume_data.
2018-05-20 08:45:24 +02:00
d_komarov 5f74b6e353 Bump `file_error_alert` priority
This alert's priority must be higher than `block_downloading_alert`'s
to allow custom handling of file errors.

With progress notifications enabled, network thread might fully load
alerts queue, so file errors from disk thread won't have a chance to
be delivered.
2018-05-17 00:55:07 +02:00
d_komarov 96700c15ff Set http request timeout to 5 seconds
Fixes random test failures in test_http_connection.
2018-05-17 00:54:12 +02:00
Steven Siloti 243353a144 account for partially downloaded pieces when announcing as a seed 2018-05-13 22:35:04 +02:00
arvidn 9ca12d6db5 restore aspects of the previous behavior of force-proxy. Instead of not opening any TCP listen sockets at all, open them but reject any incoming connection. This is because in RC_1_1, the UDP and TCP sockets are tied in subtle and unintuitive ways. This is much cleaner in the next major release and this patch will not need to be merged 2018-05-13 12:31:00 +02:00
d-komarov f052d1ca40 Fix bandwidth allocation (#2810)
Don't allow peer connection to ask quota from bandwidth manager if send buffer is empty.
Remove undefined member function
Update download rate multiplier
2018-05-12 13:53:03 +02:00
Arvid Norberg 90e82152b0 back-port fixes to Jamfile from master 2018-05-12 13:24:10 +02:00
arvidn a2c6136f44 add round-trip test to create_torrent 2018-05-10 19:04:26 +02:00
arvidn 299a545648 add test for suggests- and seed mode combined 2018-05-10 17:40:23 +02:00
arvidn fe25b50b1a update libsimulator with a fix for boost-1.66 2018-05-10 14:04:10 +02:00
d-komarov dc28c96559 Fix unit tests build
Export `recursive_mutex` because `emplace_alert` template injects
dependency on that type during instatiation.
2018-05-07 00:53:48 +02:00
Arvid Norberg 894933e1f1 fix typo in comment 2018-05-06 20:59:32 +02:00
arvidn 8808eb7cdd introduce a recursive mutex to protect the alert_manager, and hold the mutex while calling user callbacks and plugin hooks. This is required to ensure the underlying storage for alert allocations (in the stack allocators) is synchronized with the thread that may be accessing it 2018-05-01 23:17:51 +02:00
d-komarov 785f173df3 Revise alert priorities / torrent::on_resume_data_checked issue (#2962)
Most status alerts should have priorities above normal level. Good reason for this is resume data verification case. For a large torrent(having lots of pieces) whole alert queue will be overflowed
with a `piece_finished_alert` right after resume data has been verified. Thus alerts like `torrent_checked_alert`, `torrent_finished`, `state_changed_alert` will not go the alerts queue.
* Introduce alert_priority enumeration
* Bump state_changed_alert's priority
* Set dht_direct_response_alert priority to `critical`
2018-05-01 12:26:37 +02:00
Arvid Norberg 747fcb633a fix typo in client.py. introduce parse_magnet_uri_dict to python binding (returning a dict) in preparation for next major version that will release an add_torrent_params object 2018-04-28 19:05:23 +02:00
Steven Siloti f5e33932d2 fix use after free in flush_range and flush_iovec
Calling blocks_flushed can cause the piece entry to be freed so its
callers need to be aware of that and avoid dereferencing the pointer if
the entry is freed.
2018-04-27 16:15:19 +02:00
Arvid Norberg 366b7983d1 fix typo with bind_outgoing_socket~ 2018-04-26 19:50:25 -04:00
Chocobo1 6394e7ac02 Fix MSVC warning C4267 by casting to the correct type explictly 2018-04-24 23:16:54 -04:00
Xiyue Deng 21d8e9e26b Add missing header <cstdarg> for va_list.
* Fix building on OpenBSD.
2018-04-24 23:09:25 -04:00
arvidn 3ede0b9c20 fix last_upload, last_download and last_scrape to be reported accurately and saved/restored in resume data 2018-04-22 06:14:22 -04:00
d-komarov 44479bcca3 Fix storage initialization (#2944)
If `default_storage::has_any_file` fails during fastresume data check, `piece_manager::check_no_fastresume` will skip storage initialization. In such case, any storage operation that require part file will cause an application crash.
2018-04-21 18:35:55 +02:00
Arvid Norberg e1f99fb309 fix boost-python linking with latest version of brew 2018-04-21 18:35:05 +02:00
arvidn 9cd0ae67e7 another boost-1.67 build fix 2018-04-13 14:43:41 +02:00
Steven Siloti b3faba329d create dummy alias for boost_python3 when python3 is unavailable
Versions of boost as recent as 1.63 do not create a stub alias for python3
which causes build failures if no version of python3 is configured.
Duplicate that behavior so that building works even on older versions of
boost.
2018-04-13 08:27:22 +02:00
arvidn 64d6b49004 fix boost-1.67 build 2018-04-12 14:33:46 +02:00
Steven Siloti 236e0e7699 pass default constructed boost::function instead of NULL
Clang 6 defines NULL as nullptr which breaks implicit construction
of boost::function from NULL.
2018-04-12 14:32:31 +02:00
arvidn aaf9304a3b update year in copyright header 2018-04-09 09:04:33 +02:00
arvidn 105934e578 bump version 2018-04-08 23:08:39 +02:00
arvidn c5a5e084dd :strtoll() returns LLONG_MAX if the input overflows. Handle this case properly in the http parser 2018-04-08 18:34:25 +02:00
V.G. Bulavintsev c08a6bf430 Make SACK header to be able to take up the whole packet. Rename m_in_buf_size to m_receive_buffer_capacity 2018-04-07 18:55:14 +02:00
V.G. Bulavintsev 257f625e2e Increase m_in_buf_size and max_packet_reorder to better handle links with high latency 2018-04-07 18:55:14 +02:00
V.G. Bulavintsev bf2f0a9c55 Fix advertised window being counted twice in congestion check 2018-04-07 18:55:14 +02:00
Fernando Rodriguez 9d83da110b Delay hash_failed_alert until on_piece_sync()
Delay the hash_failed_alert until after synchronizing with the IO thread
so that it can be used to synchronize piece progress.
2018-04-07 15:59:40 +02:00
Arvid Norberg 357217326d some cleanups 2018-04-05 12:59:35 +02:00