Commit Graph

304 Commits (c2109a5aca3a68916f6ba0969248e2bc73f49979)

Author SHA1 Message Date
Ali MJ Al-Nasrawy 01969fc530 flush OS write buffers before saving control file
This ensures that pieces are physically written to disk before
marking them as finished in the control file.

This should prevent data loss and corruption when resuming downloads
after a system crash.

Signed-off-by: Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com>
2020-06-17 11:07:03 +03:00
Ali MJ Al-Nasrawy 870e2a6014 flush internal buffers before auto-saving control file
Otherwise, some pieces may be marked as finished in the control file
though they have not yet been written to the storage file.

This should prevent data loss and corruption when resuming downloads
after an app crash.

Signed-off-by: Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com>
2020-06-17 11:05:30 +03:00
Tatsuhiro Tsujikawa e0a827ff98 Enable IndentPPDirectives 2018-06-09 16:23:36 +09:00
Tatsuhiro Tsujikawa 3d5c76800d Take into account address family when resolving DHT node address 2016-12-03 16:18:14 +09:00
Nils Maier 366e2e8f79 Use default where possible 2016-08-29 16:52:20 +02:00
Tatsuhiro Tsujikawa 8e07568a9e clang-format 2016-07-21 01:00:47 +09:00
Nils Maier 665a1d1b35 Better auto-renaming
Up until now aria2 file auto renaming worked by just appending a new
unique number to the file path, behind the file name extension, if any,
changing what most other programs consider the file extension in the
process.
Now, aria2 will attempt to insert the number before the file extension,
leaving the extension intact, so that e.g. a ".jpg" still is a ".jpg"
file and opens in your configured image viewer when clicking it.
If a file has no extension (incl. so called "dot files"), the number
will be appended to the file name as usual.

Note: This is a potentially breaking change that might break third party
scripts that rely on aria2 auto file renaming producing a certain format
for renamed files. Please fix your scripts accordingly.

Closes GH-709
2016-07-19 20:55:41 +02:00
Tatsuhiro Tsujikawa babdcb2c7d Change have entry indexing method
Now use increasing sequence of integer rather than timer value.
2016-07-10 22:42:49 +09:00
Tatsuhiro Tsujikawa fa07d0be35 Fix uninitialized variable 2016-06-14 21:55:42 +09:00
Tatsuhiro Tsujikawa 9d40c47799 Merge branch 'master' into dynamic-select-file 2016-05-22 20:57:33 +09:00
Tatsuhiro Tsujikawa 949a580a14 mingw32: Gain privilege before opening files 2016-05-18 22:59:46 +09:00
Tatsuhiro Tsujikawa 8897d7ec70 Restart active download to apply previously not applicable options
Previously, we categorized options that can be used in
aria2.changeOption RPC method into 2 categories.  The options in one
category can be applied on the fly, meaning that download continues to
be active while applying options.  Another category includes options
which are only applicable when downloads are waiting or paused.

In this change, when active download is ordered to change options
which only applicable in waiting or paused state, it is now paused,
and then automatically restarted.  Although we have limited number of
download concurrency, the pause and restart is done atomically, and
the download is inserted at the front of the queue, it is picked up
immediately if the concurrency regulation allows.
2016-05-06 18:31:50 +09:00
Tatsuhiro Tsujikawa 3c637fa3d5 Fix downloaded metaurl torrent filename 2016-04-23 19:29:01 +09:00
Tatsuhiro Tsujikawa ca634a82bd Add bittorrent key to aria2.tellStopped status 2016-04-17 21:06:41 +09:00
Tatsuhiro Tsujikawa d64089632e Merge branch 'master' into random-webseeding 2016-03-26 17:20:27 +09:00
Tatsuhiro Tsujikawa 21754fa103 Add following to aria2.tellStatus response key as reverse link for followedBy 2016-03-05 14:20:42 +09:00
Tatsuhiro Tsujikawa 8d30869966 Fix compile error with --disable-bittorrent 2016-02-15 23:54:51 +09:00
Tatsuhiro Tsujikawa 25615fcb17 Add "seeder" key to tellStatus RPC response 2016-02-03 22:21:37 +09:00
Tatsuhiro Tsujikawa 8b93b12488 Reduce delay in tracker request
We eliminated 1 second delay between completion of name resolution for
tracker request and time when it is actually issued.  We also elimited
1 second delay after last torrent download exists and it is told to
DHTInteractionCommand.
2016-01-19 11:24:57 +09:00
Tatsuhiro Tsujikawa b1132d6b10 make clang-format using clang-format-3.6 2015-12-27 18:40:08 +09:00
Tatsuhiro Tsujikawa 9a77c404f7 Fix bug that pause/unpause seeding torrent prevents new downloads from starting
Previously, with --bt-detach-seed-only, when user issued pause and
unpause command to seeding torrent, and it was started again, and it
immediately got seeding status, but aria2 did not start new download
waiting in the queue.  This commit fixes this bug.

See GH-490
2015-12-02 23:49:38 +09:00
Jarda Snajdr 06b8874a49 Send the last error message as part of tellStatus RPC response 2015-11-18 14:54:29 +01:00
Tatsuhiro Tsujikawa c81b132112 Merge branch 'master' into random-webseeding 2015-10-03 17:59:39 +09:00
Tatsuhiro Tsujikawa 0b48bb1dbd Use user-defined literals for time units 2015-06-21 15:30:02 +09:00
Tatsuhiro Tsujikawa 37c2edd97a Use std::shuffle, instead of std::random_shuffle 2015-06-11 22:40:56 +09:00
Tatsuhiro Tsujikawa 99cd73c092 Replace timer facility with chrono lib 2015-06-09 02:05:34 +09:00
Tatsuhiro Tsujikawa c63fc414c3 Add --stream-piece-selector=random 2015-02-14 18:33:37 +09:00
Nils Maier 6f9ea555c2 Fix compiler warning 2014-12-12 10:34:53 +01:00
Tatsuhiro Tsujikawa f72a303b8d Add --bt-detach-seed-only option
This option excludes seed only downloads when counting concurrent
active downloads (-j option).  This means that if -j3 is given and
this option is turned on and 3 downloads are active and one of those
enters seed mode, then it is excluded from active download count (thus
it becomes 2), and the next download waiting in queue gets started.
But be aware that seeding item is still recognized as active download
in RPC method.
2014-10-14 00:13:29 +09:00
Tatsuhiro Tsujikawa 9b84727324 Use std::make_shared and make_unique where possible, part 2 2014-09-13 18:37:57 +09:00
Tatsuhiro Tsujikawa 570bc24fb9 Fix use-after-free on exit with multi-file torrent download + DHT
DefaultPieceStorage may be referenced by one of DHT task (e.g.,
DHTPeerLookupTask), after RequestGroup was deleted, and even after
RequestGroupMan was deleted.  DefaultPieceStorage has a reference to
MultiDiskAdaptor which calls RequestGroupMan object on destruction.
So when DHT task is destroyed, DefaultPieceStorage is destroyed, which
in turn destroys MultiDiskAdaptor.  DHT task is destroyed after
RequestGroupMan was destroyed, MultiDiskAdaptor will use now freed
RequestGroupMan object, this is use-after-free.
2014-06-08 17:03:34 +09:00
Tatsuhiro Tsujikawa adeead6f03 Revert to existing "proper" coding style
The rule is simple: don't try to change the coding style of the
existing codebase.
2014-06-03 23:41:30 +09:00
Nils Maier 010131161e Remove ENABLE_MESSAGE_DIGEST, since we got the internal md, always 2014-04-17 18:02:42 +02:00
Tatsuhiro Tsujikawa dcf98d519f Fix crash if unpause failed before assigning BtProgressInfoFile object 2014-01-05 20:41:19 +09:00
Tatsuhiro Tsujikawa c881f9fcad Run DHT if torrent is private; but don't use DHT for that torrent 2013-12-20 21:39:30 +09:00
Nils Maier 2db0c81fc8 Stuff memory holes
Padding changes on x86_64:
- RequestGroup: 29 -> 5 bytes
- DownloadContext:  25 -> 1 bytes
- Cookie: 20 -> 4 bytes
- Command: 8 -> 0 bytes (affects many derived as well)
- HttpRequest: 20 -> 4 bytes
- DownloadCommand: 18 -> 2 bytes
- TimeBasedCommand: 14 -> 6 bytes
- AbstractCommand: 13 -> 5 bytes
- HttpSkipResponseCommand: 12 -> 4 bytes
- FileEntry: 10 -> 2 bytes
- DownloadResult: 15 -> 7 bytes
- UriStruct: 12 -> 4 bytes
- Piece: 11 -> 3 bytes
- BitfieldMan -> 11 -> 3 bytes
2013-12-09 15:41:43 +01:00
Tatsuhiro Tsujikawa 4d105a2686 Limit number of opened file globally with --bt-max-open-files option
This change changes the behavior of --bt-max-open-files. Previously,
it specifies the maximum number of opened files for each multi-file
download. Since it is more useful to limit the number globally, the
option now specifies the global limit. This change suggests that
aria2.changeOption() method now ignores --bt-max-open-files and
aria2.changeGlobalOption now reads it and dynamically change the
limit.
2013-11-17 19:33:18 +09:00
Tatsuhiro Tsujikawa 9e52483c04 Refactor DownloadHandlerFactory 2013-11-10 18:19:02 +09:00
Tatsuhiro Tsujikawa e1e6bb1ec5 Don't fail multiple concurrent dl same file if auto-file-renaming is enabled 2013-11-08 00:59:57 +09:00
Nils Maier 29d569eef9 Cleanup RequestGroup code a bit 2013-09-20 23:06:49 +02:00
Nils Maier 3590077d5c More auto-converts by cpp11-migrate 2013-09-20 23:06:49 +02:00
Nils Maier 8526ceeb45 Convert to autos and ranged loops 2013-08-21 05:56:17 +02:00
Nils Maier d8f44ef4f6 Convert most 0/NULL pointers to nullptr
Courtesy of llvm cpp11-migrate 3.3
2013-08-20 21:28:24 +02:00
Tatsuhiro Tsujikawa 162c138362 BtRegistry: Use std::unique_ptr for BtObject 2013-07-06 19:09:39 +09:00
Tatsuhiro Tsujikawa cc3cd8a58b DownloadEngine: Use std::unique_ptr for btRegistry_ 2013-07-06 18:42:57 +09:00
Tatsuhiro Tsujikawa 6b397c8125 Use std::unique_ptr for CheckIntegrityEntry and FileAllocationEntry 2013-07-06 15:56:08 +09:00
Tatsuhiro Tsujikawa 128783cf86 Use std::unique_ptr for PieceSelector instead of std::shared_ptr 2013-07-04 01:38:24 +09:00
Tatsuhiro Tsujikawa a479473949 Use std::unique_ptr for URISelector instead of std::shared_ptr 2013-07-04 01:16:48 +09:00
Tatsuhiro Tsujikawa f022402dc9 Use std::unique_ptr in DHTRegistry 2013-07-02 23:52:40 +09:00
Tatsuhiro Tsujikawa fa9f3fb5a3 Wrap Command object in std::unique_ptr 2013-06-23 21:55:52 +09:00