Auto merge of #51543 - SimonSapin:oom, r=SimonSapin
Rename OOM to allocation error The acronym is not descriptive unless one has seen it before. * Rename the `oom` function to `handle_alloc_error`. It was **stabilized in 1.28**, so if we do this at all we need to land it this cycle. * Rename `set_oom_hook` to `set_alloc_error_hook` * Rename `take_oom_hook` to `take_alloc_error_hook` Bikeshed: `on` v.s. `for`, `alloc` v.s. `allocator`, `error` v.s. `failure`
This commit is contained in:
@@ -88,38 +88,38 @@ pub use alloc_system::System;
|
||||
|
||||
static HOOK: AtomicPtr<()> = AtomicPtr::new(ptr::null_mut());
|
||||
|
||||
/// Registers a custom OOM hook, replacing any that was previously registered.
|
||||
/// Registers a custom allocation error hook, replacing any that was previously registered.
|
||||
///
|
||||
/// The OOM hook is invoked when an infallible memory allocation fails, before
|
||||
/// The allocation error hook is invoked when an infallible memory allocation fails, before
|
||||
/// the runtime aborts. The default hook prints a message to standard error,
|
||||
/// but this behavior can be customized with the [`set_oom_hook`] and
|
||||
/// [`take_oom_hook`] functions.
|
||||
/// but this behavior can be customized with the [`set_alloc_error_hook`] and
|
||||
/// [`take_alloc_error_hook`] functions.
|
||||
///
|
||||
/// The hook is provided with a `Layout` struct which contains information
|
||||
/// about the allocation that failed.
|
||||
///
|
||||
/// The OOM hook is a global resource.
|
||||
#[unstable(feature = "oom_hook", issue = "51245")]
|
||||
pub fn set_oom_hook(hook: fn(Layout)) {
|
||||
/// The allocation error hook is a global resource.
|
||||
#[unstable(feature = "alloc_error_hook", issue = "51245")]
|
||||
pub fn set_alloc_error_hook(hook: fn(Layout)) {
|
||||
HOOK.store(hook as *mut (), Ordering::SeqCst);
|
||||
}
|
||||
|
||||
/// Unregisters the current OOM hook, returning it.
|
||||
/// Unregisters the current allocation error hook, returning it.
|
||||
///
|
||||
/// *See also the function [`set_oom_hook`].*
|
||||
/// *See also the function [`set_alloc_error_hook`].*
|
||||
///
|
||||
/// If no custom hook is registered, the default hook will be returned.
|
||||
#[unstable(feature = "oom_hook", issue = "51245")]
|
||||
pub fn take_oom_hook() -> fn(Layout) {
|
||||
#[unstable(feature = "alloc_error_hook", issue = "51245")]
|
||||
pub fn take_alloc_error_hook() -> fn(Layout) {
|
||||
let hook = HOOK.swap(ptr::null_mut(), Ordering::SeqCst);
|
||||
if hook.is_null() {
|
||||
default_oom_hook
|
||||
default_alloc_error_hook
|
||||
} else {
|
||||
unsafe { mem::transmute(hook) }
|
||||
}
|
||||
}
|
||||
|
||||
fn default_oom_hook(layout: Layout) {
|
||||
fn default_alloc_error_hook(layout: Layout) {
|
||||
dumb_print(format_args!("memory allocation of {} bytes failed", layout.size()));
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ fn default_oom_hook(layout: Layout) {
|
||||
pub extern fn rust_oom(layout: Layout) -> ! {
|
||||
let hook = HOOK.load(Ordering::SeqCst);
|
||||
let hook: fn(Layout) = if hook.is_null() {
|
||||
default_oom_hook
|
||||
default_alloc_error_hook
|
||||
} else {
|
||||
unsafe { mem::transmute(hook) }
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use alloc::{Global, Alloc, Layout, LayoutErr, CollectionAllocErr, oom};
|
||||
use alloc::{Global, Alloc, Layout, LayoutErr, CollectionAllocErr, handle_alloc_error};
|
||||
use hash::{BuildHasher, Hash, Hasher};
|
||||
use marker;
|
||||
use mem::{size_of, needs_drop};
|
||||
@@ -699,7 +699,7 @@ impl<K, V> RawTable<K, V> {
|
||||
// point into it.
|
||||
let (layout, _) = calculate_layout::<K, V>(capacity)?;
|
||||
let buffer = Global.alloc(layout).map_err(|e| match fallibility {
|
||||
Infallible => oom(layout),
|
||||
Infallible => handle_alloc_error(layout),
|
||||
Fallible => e,
|
||||
})?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user