{"record":{"id":"ee1a6d827b2ba594","repo":"oxc-project/oxc","slug":"virtualfree-failed-during-cleanup-err","errorCode":null,"errorMessage":"`VirtualFree` failed during cleanup: {err}","messagePattern":"`VirtualFree` failed during cleanup: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"crates/oxc_allocator/src/arena/fixed_size/windows.rs","lineNumber":276,"sourceCode":"            reservation_ptr.add(offset)\n        };\n        debug_assert!(is_pointer_aligned_to(container_ptr, CONTAINER_ALIGN));\n\n        // Get pointer to the start of the initial committed region within the Container\n        // (the region that contains `ChunkFooter`).\n        // SAFETY: `INITIAL_COMMITTED_START_OFFSET < CONTAINER_SIZE`, and the Container's `CONTAINER_SIZE` bytes\n        // are within the reservation, so `container_ptr + INITIAL_COMMITTED_START_OFFSET` is in bounds.\n        let committed_ptr = unsafe { container_ptr.add(INITIAL_COMMITTED_START_OFFSET) };\n        debug_assert!(is_pointer_aligned_to(committed_ptr, PAGE_SIZE));\n\n        // Commit the initial region - the last `FIRST_ALLOCATION_GOAL` bytes of the Container.\n        // SAFETY: `committed_ptr` is page-aligned and within the reservation we just made.\n        let commit_result = unsafe { Mmap::commit(committed_ptr, FIRST_ALLOCATION_GOAL) };\n        if commit_result.is_err() {\n            // Commit failed - release the reservation before returning.\n            // SAFETY: `reservation_ptr` was just returned by `Mmap::reserve(RESERVED_SIZE)`.\n            unsafe { Mmap::free(reservation_ptr, RESERVED_SIZE) }.unwrap_or_else(|err| {\n                panic!(\"`VirtualFree` failed during cleanup: {err}\");\n            });\n            return None;\n        }\n\n        // Construct the Arena via `from_raw_parts`.\n        //\n        // It writes the `ChunkFooter` at `start_ptr + INITIAL_CHUNK_SIZE - CHUNK_FOOTER_SIZE`\n        // = `container_addr + BLOCK_SIZE - CHUNK_FOOTER_SIZE`, so `ChunkFooter` ends 16 bytes before end of Container.\n        // This is the position other code expects it to be.\n        //\n        // SAFETY:\n        // * `committed_ptr` is page-aligned (so `CHUNK_ALIGN`-aligned, since `PAGE_SIZE >= CHUNK_ALIGN`).\n        // * `INITIAL_CHUNK_SIZE` is asserted statically to be `>= CHUNK_FOOTER_SIZE` and a multiple of `CHUNK_ALIGN`.\n        // * `committed_ptr..committed_ptr + INITIAL_CHUNK_SIZE` lies within\n        //   `reservation_ptr..reservation_ptr + RESERVED_SIZE`: The Container is within the reservation,\n        //   and `committed_ptr + INITIAL_CHUNK_SIZE` = Block end <= Container end <= Reserved end.\n        // * The reservation was made via `VirtualAlloc` with `MEM_RESERVE`. The Arena's `Drop` impl\n        //   delegates to `dealloc_fixed_size_arena_chunk` (because `is_fixed_size` is `true`),","sourceCodeStart":258,"sourceCodeEnd":294,"githubUrl":"https://github.com/oxc-project/oxc/blob/e1e7af627c8843ab64044ed466b128fcc21a035b/crates/oxc_allocator/src/arena/fixed_size/windows.rs#L258-L294","documentation":"Diagnostic from oxlint's vue/prop-name-casing rule (crates/oxc_linter/src/rules/vue/prop_name_casing.rs). It enforces one casing convention for prop names — camelCase by default, snake_case via the `caseType` option — across Options API `props` objects, runtime `defineProps({...})` objects, and type-only `defineProps<{...}>` signatures. The message interpolates the offending prop name and the configured case type.","triggerScenarios":"Declaring a prop whose name does not match the configured case: `props: { 'first-name': String }` under camelCase, or `defineProps({ userName: String })` under snake_case. Vue component options objects (excluding component instances) and defineProps forms are both inspected; kebab-case names trip camelCase mode, camelCase names trip snake_case mode.","commonSituations":"HTML-first teams writing kebab-case prop names ('first-name') in JS; backend/Python teams preferring snake_case; merged codebases with mixed conventions; refactoring from array syntax `props: ['first-name']` to object syntax.","solutions":["Rename the prop to camelCase (default convention): 'first-name' -> firstName; templates can still pass it as kebab-case attribute.","If the team standard is snake_case, configure the rule: { \"vue/prop-name-casing\": [\"error\", { \"caseType\": \"snake_case\" }] }.","Update component consumers after renaming — Vue automatically maps kebab-case attributes to camelCase props."],"exampleFix":"// before (caseType: camelCase)\nexport default {\n  props: { 'item-count': Number }\n}\n\n// after\nexport default {\n  props: { itemCount: Number }\n}","handlingStrategy":"validation","validationCode":"// validate prop-name casing while authoring props objects\nfunction propCasingOk(name, convention = 'camelCase') {\n  return convention === 'camelCase'\n    ? /^[a-z][a-zA-Z0-9]*$/.test(name)\n    : /^[a-z][a-z0-9_]*$/.test(name);\n}\nfunction checkProps(defs, convention) {\n  for (const name of Object.keys(defs)) {\n    if (!propCasingOk(name, convention)) throw new Error(`prop '${name}' violates ${convention}`);\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Standardize on camelCase prop names in JS/TS; templates may keep kebab-case attributes.","Encode the convention in the shared oxlint config so editors and CI enforce the same case.","When consuming snake_case API payloads, map keys at the data boundary instead of in prop names."],"tags":["vue","oxlint","lint","props","naming","style","defineprops"],"backgroundTag":"vue-prop-naming-convention","analyzedSha":"e1e7af627c8843ab64044ed466b128fcc21a035b","analyzedAt":"2026-08-20T07:01:07.079Z","contentChangedAt":"2026-08-20T07:01:07.079Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}