diff --git a/library/libsds.nim b/library/libsds.nim index c7f41e9..b9ef390 100644 --- a/library/libsds.nim +++ b/library/libsds.nim @@ -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( diff --git a/nimble.lock b/nimble.lock index ad7d9e3..6ccb63a 100644 --- a/nimble.lock +++ b/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" } } },