@torrent-tv/proxy 2.58.0 → 2.58.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 2.58.1
2
+
3
+ - **Fix**: `utp-native` moves to 2.5.3-ttv.7, which removes a defect ttv.6 itself introduced. That release registered an environment cleanup hook per uTP context and never removed it on the ordinary close path, so once a context finished closing and its buffer was collected the hook stayed registered against freed memory. At teardown it then ran there and called `uv_close` on handles that no longer existed, putting a dead handle into libuv's closing machinery; the fault surfaced later and elsewhere, when a healthy handle was unlinked and its neighbour in the loop's handle queue turned out to be that dead one. Read from `core.WorkerThread.81.1787857798` down to the faulting instruction — `QUEUE_REMOVE`'s second store with an unmapped operand — and by walking the loop's handle queue until a node could not be read (`research/worker-crash-cleanup-hook-2026-08-27.md`).
4
+
1
5
  ## 2.58.0
2
6
 
3
7
  - **Fix**: `utp-native` moves to 2.5.3-ttv.6, which removes the fault the ninth core dump named. Its stack carries no uTP frame at all — `uv_timer_stop` ← `uv_close` ← `PerIsolatePlatformData::Shutdown` ← `NodePlatform::UnregisterIsolate` ← `Worker::Run` — the torrent worker thread ending and node walking its loop into memory that had gone. `uv_udp_t` and `uv_timer_t` are fields of a struct that lives inside a JavaScript Buffer, and they are registered on the loop, so libuv holds pointers into collector-owned memory for as long as they stay registered; the thread ending takes that memory with the heap. On a main thread nobody notices because the process is ending anyway, and this proxy runs the torrent client in a worker. Three changes: a cleanup hook takes the handles off the loop before the environment goes; a plain int says whether the environment can still be called into and every callback reads it first; a strong reference holds the buffer until both handles have closed. 77 checks pass on the target.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@torrent-tv/proxy",
3
- "version": "2.58.0",
3
+ "version": "2.58.1",
4
4
  "description": "Torrent proxy client that exposes webseed-like HTTP stream endpoint.",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "publishConfig": {
@@ -45,6 +45,6 @@
45
45
  "@biomejs/biome": "^2.5.7"
46
46
  },
47
47
  "overrides": {
48
- "utp-native": "npm:@torrent-tv/utp-native@2.5.3-ttv.6"
48
+ "utp-native": "npm:@torrent-tv/utp-native@2.5.3-ttv.7"
49
49
  }
50
50
  }