1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-22 06:00:41 +00:00
Commit graph

3520 commits

Author SHA1 Message Date
Jordan Lee
06948a8514 (trunk libT) #2955 "verify pieces only when necessary, or when the user requests it." -- improvements to .resume file
As pointed out by longinus00 and ijuxda, storing per-piece timestamps in the .resume file can involve a lot of overhead. This commit reduces the overhead by adding a couple of optimizations: (1) in cases where *all* or *none* of the files' pieces were checked after the file's mtime, we can safely fold all the pieces' mtimes into a single per-file mtime. (2) since unix time takes up a lot of space when rendered as a benc integer, find a common per-file "baseline" number, then store the pieces' timestamps as offsets from that number.  Also add documentation explaining this new format, and also better explaining the pre-2.20 progress format.
2011-02-02 21:17:16 +00:00
Jordan Lee
5fc1ff8855 (trunk libT) #3973 "JIT verification verifies freshly-downloaded torrents" -- test fix.
Files downloaded in Transmission 2.20 betas [1..3] forced each piece to be checked twice -- once on download, and once when uploading the piece for the first time. Older versions of Transmission didn't perform the latter check unless the file had changed after it was downloaded. This commit restores that behavior.
2011-02-02 20:30:04 +00:00
Jordan Lee
859570345d (trunk libT) tweak the documentation on a couple of structs 2011-02-02 17:15:41 +00:00
Jordan Lee
4736d863bf (trunk libT) minor code cleanup to inout.c's readOrWriteBytes().
Use ijuxda's suggestion of making the fstat(fd) call dependent on (fd>=0) rather than (!err).
2011-02-02 06:06:09 +00:00
Jordan Lee
fc1c5fe553 (trunk libT) silence some unused variable warnings from gcc when building with -DNDEBUG 2011-02-02 05:18:33 +00:00
Jordan Lee
ba7e856ce2 (trivial) make the implementation of tr_torPieceCountBlocks(), tr_torPieceCountBytes(), and tr_torBlockCountBytes() consistent. 2011-02-01 21:32:03 +00:00
Jordan Lee
ee849ab82b (trunk libT) #3956 "tr_bencFree() could be faster" -- fix memory error.
#3956's r11780 has uncovered a longstanding memory error that occurs when tr_bencParse() fails to parse a dict and leaves a dangling key. This is fixed by cleaning up the key.
2011-02-01 17:56:19 +00:00
Jordan Lee
8f69a33c79 (trunk libT) #3836 "libevent 2 support" -- fix minor memory leak.
tr_peerIoReconnect() was calling event_del() rather than event_free() on its io.event_read and io.event_write fields, causing those fields to be leaked. This behavior is new with libevent 2 support and doesn't affect transmission 2.1x or older.
2011-02-01 17:12:20 +00:00
Jordan Lee
2f5fc4ade7 (trunk libT) #3959 "by default, disable prefetch for lightweight builds" -- fixed.
User jusid reports prefetch causes load on his NMT to jump from <1 to 3-4. He requests a way to disable prefetch, and suggests that prefetch be disabled by default on lightweight builds.  This commit adds a new settings.json key, "prefetch-enabled", which defaults to "true" on standard builds and "false" when compiled with --enable-lightweight.
2011-01-31 23:35:10 +00:00
Jordan Lee
392df7ceb8 (trunk libT) #3969 "tr_base64_encode() has unnecessary overhead with linefeeds" -- fixed.
Don't add linefeeds to base64-encoded data. We don't need it and it just increases the length of the string, which is typically sent over the network to an RPC client.
2011-01-31 22:47:07 +00:00
Jordan Lee
9ed800c45a (trunk libt) #3968 "tr_cpFileIsComplete could be faster" -- fixed.
Rewriting this function as described in ticket #3968. This rewrite drops it from 1.77% of cpu use to 0.07%.
2011-01-31 16:43:37 +00:00
Jordan Lee
a9e104d591 (trunk libT) #3931 "announce is queued" -- minor revision for uClibc compatibility
jusid reports that powl() doesn't exist on uClibc, so getRetryInterval() needs to work without it. A simple left-bit shifting would be fine, but since we max out after a handful of cases, a switch statement seems slightly more readable than shifting or powl().
2011-01-30 16:23:53 +00:00
Jordan Lee
e7f81543ec (trunk libT) #3961 "Support for running scripts when a torrent finishes downloading on Windows" -- fixed. patch by rb07
The changes to torrentCallScript() weren't portable to Windows, so rb07 has provided a patch.
2011-01-30 01:41:48 +00:00
Jordan Lee
69d99f252f (trunk libT) #2363 "daemon on mac moves config files on first launch" -- fixed.
Don't run platform.c's migrateFiles() except on *nix platforms. Add comment explaining when the function is used and why.
2011-01-30 01:33:53 +00:00
Jordan Lee
e492bcf7d0 (trunk libT) "Announce is Queued" but torrent doesn't announce itself to trackers -- simplify http response code handling 2011-01-29 19:04:02 +00:00
Jordan Lee
4fbd6d8b19 (trunk libT) #3950 "use libevent's cached gettimeofday() value when appropriate" -- fixed. 2011-01-29 18:59:23 +00:00
Jordan Lee
5b23aae320 (trunk libT) memory cache should use evbuffers to avoid unnecessary calls to memcpy -- done. 2011-01-29 18:56:53 +00:00
Jordan Lee
bbe51e1faf (trunk libT) #3955 "tr_torrentNext() should be inlined" -- fixed. 2011-01-29 18:54:43 +00:00
Jordan Lee
56a81ab172 (trunk libT) #33956 "tr_bencFree() could be faster" -- fixed.
benc requires its dictionaries to be represented in a sorted form, so we sort them before walking across the entries. However that's overkill when all we're doing is freeing memory, so this commit adds a mechanism in the benc walker to optionally avoid the sorting overhead.
2011-01-29 18:14:35 +00:00
Jordan Lee
f2f08f5469 (trunk libT) more NULL ptr safeguards 2011-01-27 18:54:25 +00:00
Jordan Lee
35515ee424 (trunk libT) NULL ptr safeguard 2011-01-27 05:00:09 +00:00
Jordan Lee
5d15ee8439 (trunk) #3949 "Add --enable-lightweight argument to configure" -- fixed.
TR_EMBEDDED has been around for awhile, but few (any?) repackagers are aware of it. If it was "advertised" through a configure-time argument, and in the status messages at the end of the configure script, more repackagers would be aware of it.
2011-01-27 03:53:02 +00:00
Jordan Lee
125d2506cd (trunk libT) torrent.c setLocation(): don't try to move a file if the source and destination paths are the same. 2011-01-24 06:07:06 +00:00
Jordan Lee
4e38d97621 (trunk libT) #2955 "verify pieces only when necessary, or when the user requests it." -- add better support for old .resume files
Super-poussin says some readynas users are reporting high CPU oloads in 2.20 beta 1. My guess is this is due to pieces being reverified. Before now, the .resume files kept timestamps per-file, and 2.20 keeps timestamps per-piece. The problem is that 2.20 beta 1 didn't support reading the older per-file timetstamps from .resume files, so users loading up 2.20 beta 1 may find Transmission thinks none of the pieces in the torrents have been verified.

The fix is to have 2.20 beta 2 read the old per-file timestamps, so upgrading from 2.1x to 2.20 will go smoothly. That's what this commit does.

Unfortunately, the readynas users who have already been bitten by this will continue to be bitten until they reverify their files. 2.20 beta 1, which thinks all those pieces were never verified, has probably overwritten the .resume files from 2.1x... :(
2011-01-24 05:11:16 +00:00
Mitchell Livingston
a1eedd117d #3940 Global displayed speed does not include webseeds; remove a now-unused libT speed function 2011-01-23 18:23:52 +00:00
Jordan Lee
0aee598300 (trunk libT) #3937 "inactive webseeds are listed as active"
This is caused by libtransmission using tr_webseedIsActive() in two ways: (1) webseed.c uses it to know if there are any pending requests, and (2) tr_torrentStat() uses it to set tr_stat.webseedsSendingToUs. Having a queued task isn't enough to be "active" in use (2) -- it needs to know if the webseed is actually sending data. These two uses should be moved into separate functions.
2011-01-23 16:35:23 +00:00
Jordan Lee
599d33035b (trunk libT) #3906 "DHT ignores bind-address-ipv6" -- make the process of getting the binding address consistent between IPv4 and IPv6 sockets.
As suggested by Juiusz after the IPv6 binding commit in r11749.  See: https://trac.transmissionbt.com/ticket/3906#comment:6
2011-01-22 20:43:36 +00:00
Jordan Lee
f36fc1246c (trunk libT) #3934 "manual reannounce doesn't work if the initial announce failed" -- fixed.
Use tor->isRunning, rather than tier->isRunning, when testing to see if a torrent can manual announce or not.  tor->isRunning means we're inbetween the user pressing "start" and "stop." tier->isRunning means we're inbetween successful "started" and "stopped" announcements. (This is deliberately out-of-sync from tor->isRunning because it can take awhile to for tracker announces to finish.)

Under the old code (using tier->isRunning), it was impossible to manually reannounce unless there had been a successful event=started announce first. It was also possible to manually announce after the "stop" button had been pressed if the "event=stopped" announcement hadn't finished yet.
2011-01-22 19:56:01 +00:00
Jordan Lee
75ffe999d4 (trunk libT) #3933 "announcer.c peer parsing could be simpler" -- fixed.
Remove redundant code by using tr_peerMgrCompactToPex() and tr_peerMgrCompact6ToPex() to parse compact ipv4 and ipv6 peer lists. Simplify the old-style benc peer list parsing and fix a bug that returned too few bytes in the old-style peer array.
2011-01-22 17:45:54 +00:00
Jordan Lee
68130d9c4e (trunk libT) #3906 "DHT ignores bind-address-ipv6" -- test fix.
Add code to honor the ipv6 bind address. Thanks to jch for saving me a little work by confirming the bug and pointing out where in the code the change needed to be made.
2011-01-22 13:49:15 +00:00
Jordan Lee
53f7fbb039 (trunk libT) #3927 "Use of libevent2 evbuffer_write on files..."
evbuffer_write() is intended for sockets. It works for files on Unix, but not on Windows, so we can't portably use it on files. Instead, use evbuffer_pullup() + write().
2011-01-22 13:33:05 +00:00
Jordan Lee
9220ad2300 (trunk libT) #3932 "Assertion failed: (tab != NULL), function tr_torrentAvailability"
Looks like tab can be NULL from the Mac client when magnet links are involved and the Mac client doesn't know how many pieces are available, so that assertion's not appropriate.
2011-01-22 13:21:20 +00:00
Jordan Lee
5b382d203e (trunk libT) #3870 "transmission doesn't recheck after getting initial 404" -- fixed.
The exponentially-growing interval between retries had a bug that caused intervals to be too long if no successful announce had ever been made. This commit fixes the code that calculates the interval.
2011-01-20 22:51:05 +00:00
Jordan Lee
bca543dc8e (trunk libT) #3923 "remove redundant announcer.c debug message" -- done. 2011-01-20 20:49:09 +00:00
Jordan Lee
bcb83b4577 (trunk libT) #3921 "no overhead for reads" -- fixed. thanks to jch for reporting this. 2011-01-20 00:31:46 +00:00
Jordan Lee
4f6d46cf99 (trunk libT) minor code tweak to crypto.c's tr_sha1() function 2011-01-19 21:50:51 +00:00
Jordan Lee
6ae426696f tr_sha1(): remove unnecessary casts from va_arg 2011-01-19 21:43:43 +00:00
Jordan Lee
06884387da (trunk) #3914 "strlsize() passes variable of incompatible type to the tr_formatter_size_B()" -- fixed. 2011-01-19 18:14:01 +00:00
Jordan Lee
879a2afcbd Update the copyright year in the source code comments.
The Berne Convention says that the copyright year is moot, so instead of adding another year to each file as in previous years, I've removed the year altogether from the source code comments in libtransmission, gtk, qt, utils, daemon, and cli.

Juliusz's copyright notice in tr-dht and Johannes' copyright notice in tr-lpd have been left alone; it didn't seem appropriate to modify them.
2011-01-19 13:48:47 +00:00
Jordan Lee
ba5172150a (trunk libT) #3912 "tr_torrentGetMetadataPercent() may return NaN" -- fixed. 2011-01-19 00:20:26 +00:00
Jordan Lee
8aa0f36a37 cleanup of who calls the libtransmission thread locking functions.
In some cases we were calling them from deep inside libtransmission, when they should have been called directly from the public-visible API functions: tr_torrentWebSpeeds_KBps(), tr_torrentPeers(), tr_torrentTrackers().
2011-01-18 23:44:36 +00:00
Jordan Lee
7ce0cf2322 code cleanup for tr_peerMgrTorrentAvailability().
1. move responsibility for getting a thread lock back to the public API fucntion, tr_torrentAvailability().
2. if the torrent doesn't have metadata, stop after zeroing out the table
3. minor code formatting cleanup
2011-01-18 22:51:29 +00:00
Jordan Lee
7f01f0c3ee #3911: tr_peerMgrTorrentAvailability() doesn't sample across the entire torrent' -- fixed. 2011-01-18 22:21:09 +00:00
Jordan Lee
dd77485d83 (trunk libT) demote the remaining lazy-verify debug messages from the debug window to deep logging 2011-01-18 02:17:47 +00:00
Juliusz Chroboczek
5ac1cba6ed Make ensureAtomExists add to the flags of an existing atom.
Flags are cumulative -- if we learn that a given peer groks encryption
from one source, and that it accepts incoming connections from another,
then the relevant atom should have both flags.
2011-01-16 15:51:48 +00:00
Juliusz Chroboczek
96141bdbff Consolidate both versions of tr_isPex into a single function.
There used to be two versions of tr_isPex; one correct in peer-mgr.c,
and one buggy in resume.c.  The buggy version caused us to reject all
peers with non-trivial flags when resuming.
2011-01-16 15:47:09 +00:00
Jordan Lee
a433b0c4cc #3686 "add rpc command to cleanly shutdown daemon" -- added for libT, tr-daemon, tr-gtk, tr-remote, and the rpc spec 2011-01-15 18:12:45 +00:00
Juliusz Chroboczek
6f5ecd2ab8 Make the peer-socket-tos preference more user-friendly.
Possible values are now the strings default, lowcost, throughput etc.
Numeric values are used for non-standard values.
2011-01-15 17:10:54 +00:00
Jordan Lee
b2d0b673c2 (trunk libT) #2191 "NAT-PMP and UPnP should also map UDP port" -- committed patch by starix. 2011-01-15 17:06:11 +00:00
Juliusz Chroboczek
8ea2c0daa1 Make the peer-congestion-algorithm preference visible.
When I first implemented this code, I made the preference hidden --
unless you set it yourself, it will not appear in the sttings file.
Now that it's been documented and advertised, make it visible.
2011-01-15 16:25:24 +00:00