mirror of
https://github.com/logos-messaging/nim-sds.git
synced 2026-07-02 13:59:41 +00:00
fix(libsds): adapt to nim-ffi 0.1.5 recycle API
nim-ffi 0.1.5 reworked the context pool to recycle contexts (reuse the worker thread + its fds) instead of tearing them down per cycle, which is what fixes the per-create/destroy fd leak. Two consumer-side changes are required for libsds to work with it: - SdsCreateRmReq: nim-ffi no longer points `myLib` at a thread-stack var; it owns it as a createShared'd object and frees it on recycle. So the handler must (re)allocate `ctx.myLib` before assigning, otherwise the first create dereferences a nil `myLib` and segfaults. - SdsCleanupReliabilityManager: use `releaseFFIContext` (recycle) instead of `destroyFFIContext` (full teardown). Recycle keeps the worker and its fds alive for the next manager; destroy would reintroduce the leak. It is non-blocking and fires `callback` from the FFI thread once drained, so the synchronous RET_OK fire is dropped. Lock nim-ffi to 0.1.5 (f6a3a33). Verified: libsds builds (--mm:refc) and the status-go reliability suite (incl. the multi-manager fd test) is green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
17338b0174
commit
431f2afe7b
@ -183,6 +183,9 @@ registerReqFFI(SdsCreateRmReq, ctx: ptr FFIContext[ReliabilityManager]):
|
||||
onPeriodicSync(ctx), onRetrievalHint(ctx), onRepairReady(ctx),
|
||||
)
|
||||
|
||||
# nim-ffi frees myLib on recycle, so (re)allocate it here.
|
||||
if ctx.myLib.isNil():
|
||||
ctx.myLib = createShared(ReliabilityManager)
|
||||
ctx.myLib[] = rm
|
||||
return ok("")
|
||||
|
||||
@ -342,13 +345,13 @@ proc SdsCleanupReliabilityManager(
|
||||
|
||||
clearRetrievalHint(cast[pointer](ctx))
|
||||
|
||||
let res = ReliabilityManagerFFIPool.destroyFFIContext(ctx)
|
||||
# Recycle (not destroy) to reuse the worker + its fds. NON-BLOCKING: the FFI
|
||||
# thread fires `callback` once drained; the caller blocks on it, not the return.
|
||||
let res = releaseFFIContext(ctx, callback, userData)
|
||||
if res.isErr():
|
||||
let msg = "error cleaning up reliability manager: " & res.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](msg.len), userData)
|
||||
return RET_ERR
|
||||
|
||||
callback(RET_OK, nil, 0, userData)
|
||||
return RET_OK
|
||||
|
||||
proc SdsResetReliabilityManager(
|
||||
|
||||
295
nimble.lock
295
nimble.lock
@ -1,74 +1,180 @@
|
||||
{
|
||||
"version": 2,
|
||||
"packages": {
|
||||
"nim": {
|
||||
"version": "2.2.10",
|
||||
"vcsRevision": "9fe2137fa2f3f66cf5a44f357d461829ac9e20c4",
|
||||
"url": "https://github.com/nim-lang/Nim.git",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"checksums": {
|
||||
"sha1": "17ec440fdb89f8903db29a17898af590087d2b64"
|
||||
}
|
||||
},
|
||||
"unittest2": {
|
||||
"version": "0.2.5",
|
||||
"vcsRevision": "26f2ef3ae0ec72a2a75bfe557e02e88f6a31c189",
|
||||
"url": "https://github.com/status-im/nim-unittest2",
|
||||
"url": "https://github.com/status-im/nim-unittest2.git",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"dependencies": [
|
||||
"nim"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "02bb3751ba9ddc3c17bfd89f2e41cb6bfb8fc0c9"
|
||||
}
|
||||
},
|
||||
"bearssl": {
|
||||
"version": "0.2.6",
|
||||
"vcsRevision": "11e798b62b8e6beabe958e048e9e24c7e0f9ee63",
|
||||
"version": "0.2.8",
|
||||
"vcsRevision": "22c6a76ce015bc07e011562bdcfc51d9446c1e82",
|
||||
"url": "https://github.com/status-im/nim-bearssl",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "7e068f119664cf47ad0cfb74ef4c56fb6b616523"
|
||||
"sha1": "da4dd7ae96d536bdaf42dca9c85d7aed024b6a86"
|
||||
}
|
||||
},
|
||||
"bearssl_pkey_decoder": {
|
||||
"version": "0.1.0",
|
||||
"version": "#21dd3710df9345ed2ad8bf8f882761e07863b8e0",
|
||||
"vcsRevision": "21dd3710df9345ed2ad8bf8f882761e07863b8e0",
|
||||
"url": "https://github.com/vacp2p/bearssl_pkey_decoder",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"bearssl"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "21b42e2e6ddca6c875d3fc50f36a5115abf51714"
|
||||
}
|
||||
},
|
||||
"jwt": {
|
||||
"version": "#18f8378de52b241f321c1f9ea905456e89b95c6f",
|
||||
"vcsRevision": "18f8378de52b241f321c1f9ea905456e89b95c6f",
|
||||
"url": "https://github.com/vacp2p/nim-jwt.git",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"bearssl",
|
||||
"bearssl_pkey_decoder"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "bcfd6fc9c5e10a52b87117219b7ab5c98136bc8e"
|
||||
}
|
||||
},
|
||||
"testutils": {
|
||||
"version": "0.8.1",
|
||||
"vcsRevision": "6ce5e5e2301ccbc04b09d27ff78741ff4d352b4d",
|
||||
"url": "https://github.com/status-im/nim-testutils",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "96a11cf8b84fa9bd12d4a553afa1cc4b7f9df4e3"
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"version": "0.5.1",
|
||||
"vcsRevision": "df8113dda4c2d74d460a8fa98252b0b771bf1f27",
|
||||
"url": "https://github.com/arnetheduck/nim-results",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"dependencies": [
|
||||
"nim"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "a9c011f74bc9ed5c91103917b9f382b12e82a9e7"
|
||||
}
|
||||
},
|
||||
"stew": {
|
||||
"version": "0.4.2",
|
||||
"vcsRevision": "b66168735d6f3841c5239c3169d3fe5fe98b1257",
|
||||
"version": "0.5.0",
|
||||
"vcsRevision": "4382b18f04b3c43c8409bfcd6b62063773b2bbaa",
|
||||
"url": "https://github.com/status-im/nim-stew",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"results",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "928e82cb8d2f554e8f10feb2349ee9c32fee3a8c"
|
||||
"sha1": "db22942939773ab7d5a0f2b2668c237240c67dd6"
|
||||
}
|
||||
},
|
||||
"zlib": {
|
||||
"version": "0.2.0",
|
||||
"vcsRevision": "190246aa0bb6569781370964fa2faa474203d6dd",
|
||||
"url": "https://github.com/status-im/nim-zlib",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"stew",
|
||||
"results"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "a8c0c569d82315f3ffc1249ab42b0404e84fddc3"
|
||||
}
|
||||
},
|
||||
"httputils": {
|
||||
"version": "0.4.1",
|
||||
"vcsRevision": "f142cb2e8bd812dd002a6493b6082827bb248592",
|
||||
"url": "https://github.com/status-im/nim-http-utils",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"stew",
|
||||
"results",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "016774ab31c3afff9a423f7d80584905ee59c570"
|
||||
}
|
||||
},
|
||||
"chronos": {
|
||||
"version": "4.2.2",
|
||||
"vcsRevision": "45f43a9ad8bd8bcf5903b42f365c1c879bd54240",
|
||||
"url": "https://github.com/status-im/nim-chronos",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"results",
|
||||
"stew",
|
||||
"bearssl",
|
||||
"httputils",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "3a4c9477df8cef20a04e4f1b54a2d74fdfc2a3d0"
|
||||
}
|
||||
},
|
||||
"metrics": {
|
||||
"version": "0.2.1",
|
||||
"vcsRevision": "a1296caf3ebb5f30f51a5feae7749a30df2824c2",
|
||||
"url": "https://github.com/status-im/nim-metrics",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"chronos",
|
||||
"results",
|
||||
"stew"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "84bb09873d7677c06046f391c7b473cd2fcff8a2"
|
||||
}
|
||||
},
|
||||
"faststreams": {
|
||||
"version": "0.5.0",
|
||||
"vcsRevision": "ce27581a3e881f782f482cb66dc5b07a02bd615e",
|
||||
"version": "0.5.1",
|
||||
"vcsRevision": "50889cd16ec8771106cdd0eeea460039e8571e06",
|
||||
"url": "https://github.com/status-im/nim-faststreams",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"stew",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "ee61e507b805ae1df7ec936f03f2d101b0d72383"
|
||||
"sha1": "969ceb3666e807db8fe5c8df63466749822367a9"
|
||||
}
|
||||
},
|
||||
"serialization": {
|
||||
@ -77,6 +183,7 @@
|
||||
"url": "https://github.com/status-im/nim-serialization",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"faststreams",
|
||||
"unittest2",
|
||||
"stew"
|
||||
@ -91,6 +198,7 @@
|
||||
"url": "https://github.com/status-im/nim-json-serialization",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"faststreams",
|
||||
"serialization",
|
||||
"stew",
|
||||
@ -100,24 +208,13 @@
|
||||
"sha1": "8b3115354104858a0ac9019356fb29720529c2bd"
|
||||
}
|
||||
},
|
||||
"testutils": {
|
||||
"version": "0.8.0",
|
||||
"vcsRevision": "e4d37dc1652d5c63afb89907efb5a5e812261797",
|
||||
"url": "https://github.com/status-im/nim-testutils",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "d1678f50aa47d113b4e77d41eec2190830b523fa"
|
||||
}
|
||||
},
|
||||
"chronicles": {
|
||||
"version": "0.12.2",
|
||||
"vcsRevision": "27ec507429a4eb81edc20f28292ee8ec420be05b",
|
||||
"url": "https://github.com/status-im/nim-chronicles",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"faststreams",
|
||||
"serialization",
|
||||
"json_serialization",
|
||||
@ -127,34 +224,18 @@
|
||||
"sha1": "02febb20d088120b2836d3306cfa21f434f88f65"
|
||||
}
|
||||
},
|
||||
"httputils": {
|
||||
"version": "0.4.0",
|
||||
"vcsRevision": "c53852d9e24205b6363bba517fa8ee7bde823691",
|
||||
"url": "https://github.com/status-im/nim-http-utils",
|
||||
"stint": {
|
||||
"version": "0.8.2",
|
||||
"vcsRevision": "470b7892561b5179ab20bd389a69217d6213fe58",
|
||||
"url": "https://github.com/status-im/nim-stint",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"stew",
|
||||
"results",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "298bc5b6fe4e5aa9c3b7e2ebfa17191675020f10"
|
||||
}
|
||||
},
|
||||
"chronos": {
|
||||
"version": "4.0.4",
|
||||
"vcsRevision": "0646c444fce7c7ed08ef6f2c9a7abfd172ffe655",
|
||||
"url": "https://github.com/status-im/nim-chronos",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"results",
|
||||
"stew",
|
||||
"bearssl",
|
||||
"httputils",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "455802a90204d8ad6b31d53f2efff8ebfe4c834a"
|
||||
"sha1": "d8f871fd617e7857192d4609fe003b48942a8ae5"
|
||||
}
|
||||
},
|
||||
"dnsclient": {
|
||||
@ -162,22 +243,11 @@
|
||||
"vcsRevision": "23214235d4784d24aceed99bbfe153379ea557c8",
|
||||
"url": "https://github.com/ba0f3/dnsclient.nim",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"checksums": {
|
||||
"sha1": "65262c7e533ff49d6aca5539da4bc6c6ce132f40"
|
||||
}
|
||||
},
|
||||
"jwt": {
|
||||
"version": "0.2",
|
||||
"vcsRevision": "18f8378de52b241f321c1f9ea905456e89b95c6f",
|
||||
"url": "https://github.com/vacp2p/nim-jwt.git",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"bearssl",
|
||||
"bearssl_pkey_decoder"
|
||||
"nim"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "bcfd6fc9c5e10a52b87117219b7ab5c98136bc8e"
|
||||
"sha1": "65262c7e533ff49d6aca5539da4bc6c6ce132f40"
|
||||
}
|
||||
},
|
||||
"nimcrypto": {
|
||||
@ -185,58 +255,20 @@
|
||||
"vcsRevision": "b3dbc9c4d08e58c5b7bfad6dc7ef2ee52f2f4c08",
|
||||
"url": "https://github.com/cheatfate/nimcrypto",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"dependencies": [
|
||||
"nim"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "f72b90fe3f4da09efa482de4f8729e7ee4abea2f"
|
||||
}
|
||||
},
|
||||
"metrics": {
|
||||
"version": "0.1.2",
|
||||
"vcsRevision": "11d0cddfb0e711aa2a8c75d1892ae24a64c299fc",
|
||||
"url": "https://github.com/status-im/nim-metrics",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"chronos",
|
||||
"results",
|
||||
"stew"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "5cdac99d85d3c146d170e85064c88fb28f377842"
|
||||
}
|
||||
},
|
||||
"secp256k1": {
|
||||
"version": "0.6.0.3.2",
|
||||
"vcsRevision": "d8f1288b7c72f00be5fc2c5ea72bf5cae1eafb15",
|
||||
"url": "https://github.com/status-im/nim-secp256k1",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"stew",
|
||||
"results",
|
||||
"nimcrypto"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "6618ef9de17121846a8c1d0317026b0ce8584e10"
|
||||
}
|
||||
},
|
||||
"zlib": {
|
||||
"version": "0.1.0",
|
||||
"vcsRevision": "e680f269fb01af2c34a2ba879ff281795a5258fe",
|
||||
"url": "https://github.com/status-im/nim-zlib",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"stew",
|
||||
"results"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "bbde4f5a97a84b450fef7d107461e5f35cf2b47f"
|
||||
}
|
||||
},
|
||||
"websock": {
|
||||
"version": "0.2.1",
|
||||
"vcsRevision": "35ae76f1559e835c80f9c1a3943bf995d3dd9eb5",
|
||||
"version": "0.3.0",
|
||||
"vcsRevision": "c105d98e6522e0e2cbe3dfa11b07a273e9fd0e7b",
|
||||
"url": "https://github.com/status-im/nim-websock",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"chronos",
|
||||
"httputils",
|
||||
"chronicles",
|
||||
@ -247,15 +279,16 @@
|
||||
"zlib"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "1cb5efa10cd389bc01d0707c242ae010c76a03cd"
|
||||
"sha1": "1294a66520fa4541e261dec8a6a84f774fb8c0ac"
|
||||
}
|
||||
},
|
||||
"lsquic": {
|
||||
"version": "0.0.1",
|
||||
"vcsRevision": "4fb03ee7bfb39aecb3316889fdcb60bec3d0936f",
|
||||
"version": "#6ae249c5d9f5eba9999704e1ffe77483cbf8fcdd",
|
||||
"vcsRevision": "6ae249c5d9f5eba9999704e1ffe77483cbf8fcdd",
|
||||
"url": "https://github.com/vacp2p/nim-lsquic",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"zlib",
|
||||
"stew",
|
||||
"chronos",
|
||||
@ -264,12 +297,27 @@
|
||||
"chronicles"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "f465fa994346490d0924d162f53d9b5aec62f948"
|
||||
"sha1": "b11b0a74191cb5bd643d97a0f917dc9668256849"
|
||||
}
|
||||
},
|
||||
"secp256k1": {
|
||||
"version": "0.6.0.3.2",
|
||||
"vcsRevision": "d8f1288b7c72f00be5fc2c5ea72bf5cae1eafb15",
|
||||
"url": "https://github.com/status-im/nim-secp256k1",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"stew",
|
||||
"results",
|
||||
"nimcrypto"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "6618ef9de17121846a8c1d0317026b0ce8584e10"
|
||||
}
|
||||
},
|
||||
"libp2p": {
|
||||
"version": "1.15.2",
|
||||
"vcsRevision": "ca48c3718246bb411ff0e354a70cb82d9a28de0d",
|
||||
"version": "1.15.3",
|
||||
"vcsRevision": "79002827ef32ba51b83e123e1649fc4b394612a1",
|
||||
"url": "https://github.com/vacp2p/nim-libp2p",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
@ -284,24 +332,12 @@
|
||||
"websock",
|
||||
"unittest2",
|
||||
"results",
|
||||
"serialization",
|
||||
"lsquic",
|
||||
"jwt"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "3b2cdc7e00261eb4210ca3d44ec3bd64c2b7bbba"
|
||||
}
|
||||
},
|
||||
"stint": {
|
||||
"version": "0.8.2",
|
||||
"vcsRevision": "470b7892561b5179ab20bd389a69217d6213fe58",
|
||||
"url": "https://github.com/status-im/nim-stint",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"stew",
|
||||
"unittest2"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "d8f871fd617e7857192d4609fe003b48942a8ae5"
|
||||
"sha1": "578e48f1e22cc14327e6d2f915c936f37c342c83"
|
||||
}
|
||||
},
|
||||
"taskpools": {
|
||||
@ -309,23 +345,26 @@
|
||||
"vcsRevision": "9e8ccc754631ac55ac2fd495e167e74e86293edb",
|
||||
"url": "https://github.com/status-im/nim-taskpools",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"dependencies": [
|
||||
"nim"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "09e1b2fdad55b973724d61227971afc0df0b7a81"
|
||||
}
|
||||
},
|
||||
"ffi": {
|
||||
"version": "0.1.4",
|
||||
"vcsRevision": "fb25f069d2dfae2b543d79d2c1a81f197de22a2b",
|
||||
"version": "0.1.5",
|
||||
"vcsRevision": "f6a3a338c0253b8fe6411809ce240b1aef872cd1",
|
||||
"url": "https://github.com/logos-messaging/nim-ffi",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [
|
||||
"nim",
|
||||
"chronos",
|
||||
"chronicles",
|
||||
"taskpools"
|
||||
],
|
||||
"checksums": {
|
||||
"sha1": "4a5d4020a40106fa2a698d5fe975b9a8ba961f91"
|
||||
"sha1": "f5f55f13762740648377bf92e0df87def01a614d"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user