summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
43 hoursPanic when not able to start the accesslist workers.Dirk Engling
43 hoursFix one potential OOB read when parsing the config fileDirk Engling
43 hoursSilence x86 warnings, cast char before handing it to isspaceDirk Engling
45 hourstrackerlogic_deinit resets its per-bucket counter so shutdown no longer corrupts g_torrent_countDirk Engling
45 hoursRetire the busy network tracker. /24 networks don't say anything anymore in 2026 and in v6 it was broken from the beginningDirk Engling
45 hoursFix minor format string issuesDirk Engling
45 hoursSilence leak checker. On exit trackerlogic frees the global workstructDirk Engling
45 hoursSilence leak detector. On exit remove the ongoing deflate bufferDirk Engling
45 hourspanic when we can't install essential worker threadsDirk Engling
3 daysUnify the peerlists for v4 and v6Dirk Engling
This commit finishes what started with unifying v4 and v6 trackers, from then on, torrents carried a peer list per family, with obvious redundancies. With the race to save memory, these became burdening enough that now these peerlist pointers have been moved into a single struct, holding both v4 and v6 peers in their respective ot_vectors, so the per- torrent cost shrunk by another pointer's size. Each peerlist also lost its peer count cache, as in most cases, it's trivial to load it directly from the ot_vector's entry count. The seed counts that were kept per family only to be aggregated later for every consumer, are also merged now. Total savings depend on the tracker's actual load. In some corner cases, where only one address family dominates the torrents, we actually use a few bytes more in the ot_vector for the absent family, but even that mostly becomes noise: before it actually adds to the memory load, the peer payload will be the deciding factor. Most wins are on what often is experienced on trackers: A long tail of abandoned torrents now needs eight fewer bytes, slipping into a smaller allocation unit on glibc's allocator.
3 daysAdd a knob to help reducing memory consumption. This time: empty torrents may expire soonerDirk Engling
3 daysFix s24s stats to ensure no unallocated vector is dereferenced. Drive-by fix for the ip= scanner in the http parserDirk Engling
4 daysStart to opentracker's memory requirementsDirk Engling
* peer lists for v4 and v6 are now lazily allocated and, more importantly, will be freed once there are no more peers * The downloaded count is now per torrent and not per peer list anymore, moving in what was alignment loss, anyway * The (now) per torrent downloaded and the per peer list peer and seed count shrunk from size_t to uint32_t * A helper guards accesses to the peer and seed count to prevent null pointer dereferences * The base time also shrank from time_t to uint32_t, minutes since the epoch currently fits in 25 bits
4 daysFix a theoretical bug where a short request packet yields an oob readDirk Engling
4 daysfix a theoretical bug where a shrinking realloc failure would leave a vector with pointer NULL and size > 0Dirk Engling
4 daysFix an accesslist reload issue where an empty-but-present changeset after a reload could potentially walk a NULL arrayDirk Engling
4 daysIf an inline handler closed the connection on error, the cookie may have become invalid. Stop processing thenDirk Engling
4 daysAlso drop supplementary groups on startupDirk Engling
4 daysTo silence leak checkers, properly deinit fullscrape writers when zlib is used, in case opentracker stops mid-creationDirk Engling
4 daysSilence an unused return warningDirk Engling
4 daysFix: livesync watermark used sizeof(ot_peer) which is a byte. Clamping on copy length nowDirk Engling
4 daysGives urlencoded_parse a destination boundDirk Engling
4 daysAdd a wall clock helper so that statedumps can be written and re-readDirk Engling
4 daysDo not offset the null pointer of an empty peer vectorDirk Engling
4 daysBound what load_state will accept for an ageDirk Engling
5 daysStop reading a connection a worker has taken overDirk Engling
5 daysUse poll instead of a condition variable to time the sleepersDirk Engling
5 daysAnswer blacklisted torrent announces with an empty packet, that carries a re-announce timeoutDirk Engling
5 daysMark sockets as desinterested after reading the first task, so that the next one does not replace the old one mid flightDirk Engling
5 daysInitialise memory before it's pointers are used in case of a failed allocationDirk Engling
5 daysStart live sync where main knows the state file is inDirk Engling
5 daysInstall signal handlers before the first thread is spawnedDirk Engling
5 daysStop the cleaner before the modules it still needsDirk Engling
5 daysRead the accesslist before any consumer consults itDirk Engling
5 daysSome minor indenting and man page language style fixesDirk Engling
5 daysStep 2 of the WANT_RESTRICT_FULLSCRAPE feature (fixing a bug along the way)Dirk Engling
5 daysActually implement the OT_PERMISSION_MAY_FULLSCRAPE mechanics and add a config file entryDirk Engling
5 daysFix: Restoring a state file doubled every completed countDirk Engling
5 daysTake the clock off the wallDirk Engling
5 daysRemove stale comment about the hex conversion helperDirk Engling
5 daysClamp every elapsed time span at zero, using a set of helper functionsDirk Engling
7 daysBind mcast socket to its group rather than the wildcardDirk Engling
7 daysRefuse to start on a listen statement that does not parseDirk Engling
7 daysRefuse to start on a livesync.cluster.group that is not oneDirk Engling
7 daysLet a user pick their cluster's own multicast groupDirk Engling
7 daysSend live sync to the port it listens onDirk Engling
7 daysFix: Source, header and config file disagreed about which mcast group to join.Dirk Engling
7 daysLet a tracker with live sync built in run without a clusterDirk Engling
8 daysGive the live sync worker a real workstructDirk Engling
8 daysMove the build sources into src/Dirk Engling