Change:
As of the time of this writing, we are running jemalloc at the revision which I believe is the 4.0.4 release of jemalloc. Previously we were running which I believe is somewhere in the 3.6 series. We attempted to upgrade jemalloc many times between these two commits eventually that the previous behavior of on Windows is fundamentally racy in jemalloc right now unfortunately. This led to a to where we are today. Unfortunately, however, there is a so we are attempting to downgrade back to 3.6. There were no known problems other than some Windows issues with jemalloc 3.6, so we believe it'll be fine for awhile. In this downgrade, however, it appears that the implementation of is somewhat broken as well, causing the to fail to land. As a result, the downgrade attempt will disable jemalloc on Windows entirely. This issue will track re-enabling it on Windows as well as re-upgrading once the deadlock bug is fixed. As far as I know the only reason to not enable Windows is that lots of locking support was improved in 4.0.*, and the only reason to not upgrade immediately is the deadlock bugs we've encountered.
FWIW one of my Rust projects with CI-every-night has started deadlocking recently, and after some investigation it turned up the exact same stack trace as rustdoc itself, so that's at least another data point for the deadlock in jemalloc.

Discussion:
CFG_THIRD_PARTY_OBJECTS_i686-pc-windows-gnu := crt2.o dllcrt2.o CFG_INSTALLED_OBJECTS_i686-pc-windows-gnu := crt2.o dllcrt2.o rsbegin.o rsend.o CFG_RUSTRT_HAS_STARTUP_OBJS_i686-pc-windows-gnu := 1 <del> # FIXME(#31030) - there's not a great reason to disable jemalloc here CFG_DISABLE_JEMALLOC_i686-pc-windows-gnu := 1 </del>

CFG_THIRD_PARTY_OBJECTS_x86_64-pc-windows-gnu := crt2.o dllcrt2.o CFG_INSTALLED_OBJECTS_x86_64-pc-windows-gnu := crt2.o dllcrt2.o rsbegin.o rsend.o CFG_RUSTRT_HAS_STARTUP_OBJS_x86_64-pc-windows-gnu := 1 <del> # FIXME(#31030) - there's not a great reason to disable jemalloc here CFG_DISABLE_JEMALLOC_x86_64-pc-windows-gnu := 1 </del>

<del> Subproject commit e24a1a025a1f214e40eedafe3b9c7b1d69937922 </del> <ins> Subproject commit aab1c0a0e0b39825b16673128729ef46310a5da8 </ins>

// option. This file may not be copied, modified, or distributed // except according to those terms. <del> // ignore-windows everything is the system allocator on windows // ignore-musl no dylibs on musl yet // ignore-bitrig no jemalloc on bitrig // ignore-openbsd no jemalloc on openbsd </del> <ins> // ignore-musl no dylibs </ins> // aux-build:allocator-dylib.rs <ins> // aux-build:allocator1.rs </ins> // no-prefer-dynamic // error-pattern: cannot link together two allocators

#![feature(alloc_jemalloc)] extern crate allocator_dylib; <ins> // The main purpose of this test is to ensure that `alloc_jemalloc` **fails** // here (specifically the jemalloc allocator), but currently jemalloc is // disabled on quite a few platforms (bsds, emscripten, msvc, etc). To ensure // that this just passes on those platforms we link in some other allocator to // ensure we get the same error. // // So long as we CI linux/OSX we should be good. #[cfg(any(target_os = "linux", target_os = "macos"))] </ins> extern crate alloc_jemalloc; <ins> #[cfg(not(any(target_os = "linux", target_os = "macos")))] extern crate allocator1; </ins> fn main() { allocator_dylib::foo();

// option. This file may not be copied, modified, or distributed // except according to those terms. <del> // ignore-windows everything is the system allocator on windows // ignore-musl no dylibs on musl right now // ignore-bitrig no jemalloc on bitrig // ignore-openbsd no jemalloc on openbsd </del> <ins> // ignore-musl no dylibs </ins> // aux-build:allocator-dylib2.rs <ins> // aux-build:allocator1.rs </ins> // error-pattern: cannot link together two allocators // Ensure that rust dynamic libraries use jemalloc as their allocator, verifying

#![feature(alloc_system)] extern crate allocator_dylib2; <ins> // The main purpose of this test is to ensure that `alloc_system` **fails** // here (specifically the system allocator), but currently system is // disabled on quite a few platforms (bsds, emscripten, msvc, etc). To ensure // that this just passes on those platforms we link in some other allocator to // ensure we get the same error. // // So long as we CI linux/OSX we should be good. #[cfg(any(target_os = "linux", target_os = "macos"))] </ins> extern crate alloc_system; <ins> #[cfg(not(any(target_os = "linux", target_os = "macos")))] extern crate allocator1; </ins> fn main() { allocator_dylib2::foo(); }

// option. This file may not be copied, modified, or distributed // except according to those terms. <del> #![feature(alloc_jemalloc, alloc_system)] </del> <ins> #![feature(alloc_jemalloc)] </ins> <del> #[cfg(not(any(windows, target_os = "bitrig", target_os = "openbsd", target_os="emscripten")))] </del> <ins> #[cfg(any(target_os = "linux", target_os = "macos"))] </ins> extern crate alloc_jemalloc; <del> #[cfg(any(windows, target_os = "bitrig", target_os = "openbsd", target_os="emscripten"))] extern crate alloc_system; </del> fn main() { println!("{:?}", Box::new(3));

<del> // Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. // no-prefer-dynamic // ignore-windows no jemalloc on windows // ignore-bitrig no jemalloc on bitrig // ignore-openbsd no jemalloc on openbsd // ignore-emscripten no jemalloc on emscripten #![feature(alloc_jemalloc)] extern crate alloc_jemalloc; fn main() { println!("{:?}", Box::new(3)); } </del>