{"record":{"id":"16c6dac66065841f","repo":"nodejs/node","slug":"unable-to-write-the-pool-bundle-s","errorCode":null,"errorMessage":"unable to write the pool bundle: %s","messagePattern":"unable to write the pool bundle: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"deps/icu-small/source/tools/genrb/genrb.cpp","lineNumber":579,"sourceCode":"        }\n        processFile(arg, encoding, inputDir, outputDir, filterDir, nullptr,\n                    newPoolBundle.getAlias(),\n                    options[NO_BINARY_COLLATION].doesOccur, status);\n    }\n\n    poolBundle.close();\n\n    if(U_SUCCESS(status) && options[WRITE_POOL_BUNDLE].doesOccur) {\n        const char* writePoolDir;\n        if (options[WRITE_POOL_BUNDLE].value!=nullptr) {\n            writePoolDir = options[WRITE_POOL_BUNDLE].value;\n        } else {\n            writePoolDir = outputDir;\n        }\n        char outputFileName[256];\n        newPoolBundle->write(writePoolDir, nullptr, outputFileName, sizeof(outputFileName), status);\n        if(U_FAILURE(status)) {\n            fprintf(stderr, \"unable to write the pool bundle: %s\\n\", u_errorName(status));\n        }\n    }\n\n    u_cleanup();\n\n    /* Don't return warnings as a failure */\n    if (U_SUCCESS(status)) {\n        return 0;\n    }\n\n    return status;\n}\n\n/* Process a file */\nvoid\nprocessFile(const char *filename, const char *cp,\n            const char *inputDir, const char *outputDir, const char *filterDir,\n            const char *packageName,","sourceCodeStart":561,"sourceCodeEnd":597,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/icu-small/source/tools/genrb/genrb.cpp#L561-L597","documentation":"At the end of main(), if everything else succeeded and --writePoolBundle was requested, genrb calls newPoolBundle->write(...) to emit pool.res into the configured directory. If that write fails (U_FAILURE(status)), the human-readable code is printed. Unlike earlier fatal paths this one does not return immediately; execution continues to u_cleanup() and then returns status, so warnings are still filtered out at the very end.","triggerScenarios":"The output directory passed to --writePoolBundle does not exist or is not writable; the destination filesystem is full; a pool.res at the target path is locked by another process.","commonSituations":"Forgetting to mkdir the output directory; CI runners with small temp disks; antivirus locking the file on Windows.","solutions":["Create and verify write permission on the output directory before running genrb (`mkdir -p <dir> && [ -w <dir> ]`).","Free disk space on the target volume.","Close any process holding pool.res open (AV, indexer, other genrb) and retry."],"exampleFix":"// before\ngenrb --writePoolBundle /nonexistent root.txt\n// after\nmkdir -p out && genrb --writePoolBundle out root.txt","handlingStrategy":"validation","validationCode":"out_dir=\"${WRITE_POOL_BUNDLE:-$OUTPUT_DIR}\"\nif [ ! -d \"$out_dir\" ] || [ ! -w \"$out_dir\" ]; then\n  echo \"ERROR: pool bundle output dir '$out_dir' missing or not writable\" >&2; exit 2\nfi\n# also check free space on the target volume\ndf -Pk \"$out_dir\" | awk 'NR==2 && $4 < 1024 { print \"ERROR: <1MB free on output volume\"; exit 2 }'","typeGuard":null,"tryCatchPattern":"genrb --writePoolBundle \"$out_dir\" \"$@\" 2>err.log || {\n  grep -q 'unable to write the pool bundle' err.log && \\\n    echo \"pool.res write failed; check dir writability and disk space\" >&2\n  exit 1\n}","preventionTips":["mkdir -p the pool output directory in the build target before invoking genrb.","On Windows, exclude build dirs from antivirus scanning to avoid file-lock write failures."],"tags":["icu","genrb","pool-bundle","write-error","filesystem"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}