Title: ffi: Random "Library is closed" exceptions at call time · Issue #63010 · nodejs/node · GitHub
Open Graph Title: ffi: Random "Library is closed" exceptions at call time · Issue #63010 · nodejs/node
X Title: ffi: Random "Library is closed" exceptions at call time · Issue #63010 · nodejs/node
Description: Version v26.0.0-pre / main branch / commit 2962ccf Platform Linux looper 6.17.0-22-generic #22~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 26 15:25:54 UTC 2 x86_64 x86_64 x86_64 GNU/Linux Subsystem ffi What steps will reproduce the bug? R...
Open Graph Description: Version v26.0.0-pre / main branch / commit 2962ccf Platform Linux looper 6.17.0-22-generic #22~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 26 15:25:54 UTC 2 x86_64 x86_64 x86_64 GNU/Linux Subsystem ...
X Description: Version v26.0.0-pre / main branch / commit 2962ccf Platform Linux looper 6.17.0-22-generic #22~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 26 15:25:54 UTC 2 x86_64 x86_64 x86_64 GNU/Linux Subsystem ...
Opengraph URL: https://github.com/nodejs/node/issues/63010
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"ffi: Random \"Library is closed\" exceptions at call time","articleBody":"### Version\n\nv26.0.0-pre / main branch / commit 2962ccfbebd515da43c60f9d60937a4ec5a421e1\n\n### Platform\n\n```text\nLinux looper 6.17.0-22-generic #22~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 26 15:25:54 UTC 2 x86_64 x86_64 x86_64 GNU/Linux\n```\n\n### Subsystem\n\nffi\n\n### What steps will reproduce the bug?\n\nRun the following code with `node --experimental-ffi`, which calls memset through `node:ffi` in a loop:\n\n```js\nconst ffi = require('node:ffi');\n\nconst lib = new ffi.DynamicLibrary('libc.so.6');\n\nconst memset = lib.getFunction('memset', {\n parameters: ['ptr', 'i32', 'uint64'],\n result: 'ptr'\n});\n\nlet buf = Buffer.alloc(8192);\n\nfor (let i = 0; i \u003c 1000000; i++)\n memset(buf, 42, 8192n);\n```\n\n### How often does it reproduce? Is there a required condition?\n\nIt works if the loop is changed to iterate only a few times.\n\nThis example uses memset but the error can happen with other calls, such as atoi.\n\n### What is the expected behavior? Why is that the expected behavior?\n\nAll memset calls succeed, script runs to the end, since lib is never closed and the handle remains in scope (which should ensure the GC does not try to free anything).\n\n### What do you see instead?\n\nIt fails most times on my machine but it runs to the end on occasion.\n\nHere is the stack trace I get most (all?) times:\n\n```\nnode:internal/ffi-shared-buffer:286\n return ReflectApply(slowInvoke, undefined, args);\n ^\n\nError: Library is closed\n at memset (node:internal/ffi-shared-buffer:286:20)\n at Object.\u003canonymous\u003e (/home/niels/Bureau/ffi.js:13:5)\n at Module._compile (node:internal/modules/cjs/loader:1829:14)\n at Object..js (node:internal/modules/cjs/loader:1969:10)\n at Module.load (node:internal/modules/cjs/loader:1552:32)\n at Module._load (node:internal/modules/cjs/loader:1354:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)\n at node:internal/main/run_main_module:33:47 {\n code: 'ERR_FFI_LIBRARY_CLOSED'\n}\n\nNode.js v26.0.0-pre\n```\n\n### Additional information\n\n_No response_","author":{"url":"https://github.com/Koromix","@type":"Person","name":"Koromix"},"datePublished":"2026-04-28T13:41:59.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/63010/node/issues/63010"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:a1fa56fb-f329-f20c-5706-0c79fcbf8103 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DD88:228A12:2535DFA:34BEF6C:6A4CE92E |
| html-safe-nonce | 8cb6a016ab199c586eebb98c4c674be18766d339347e8712fb1406a2842760bf |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERDg4OjIyOEExMjoyNTM1REZBOjM0QkVGNkM6NkE0Q0U5MkUiLCJ2aXNpdG9yX2lkIjoiOTQ0MTE3MTQ0Mzk5NzAyMzE5IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 3d8dc20f638733b9f64adb4c5f5f54d536cc1aa8eb9c6b85986ffe87986f61bc |
| hovercard-subject-tag | issue:4343615305 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/63010/issue_layout |
| twitter:image | https://opengraph.githubassets.com/09aecd81f60cb1f4521317855f7453f9a028b10205b4ee1dda3e0091e92e00e8/nodejs/node/issues/63010 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/09aecd81f60cb1f4521317855f7453f9a028b10205b4ee1dda3e0091e92e00e8/nodejs/node/issues/63010 |
| og:image:alt | Version v26.0.0-pre / main branch / commit 2962ccf Platform Linux looper 6.17.0-22-generic #22~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 26 15:25:54 UTC 2 x86_64 x86_64 x86_64 GNU/Linux Subsystem ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | Koromix |
| hostname | github.com |
| expected-hostname | github.com |
| None | 299b43bca6e02ad35197ffeba30d2466846d5fb02ab96fbced5b5e6cec589fb8 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | c5a57f04eeb310f57c73fd6d751d957e2ca27ed2 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width