Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
31bec788
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
31bec788
编写于
8月 08, 2018
作者:
R
Ralf Jung
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avoid using the word 'initialized' to talk about that non-reentrant-capable state of the mutex
上级
64538858
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
9 addition
and
8 deletion
+9
-8
src/libstd/io/lazy.rs
src/libstd/io/lazy.rs
+1
-2
src/libstd/sys/unix/args.rs
src/libstd/sys/unix/args.rs
+1
-1
src/libstd/sys/unix/os.rs
src/libstd/sys/unix/os.rs
+1
-1
src/libstd/sys_common/at_exit_imp.rs
src/libstd/sys_common/at_exit_imp.rs
+1
-1
src/libstd/sys_common/mutex.rs
src/libstd/sys_common/mutex.rs
+3
-1
src/libstd/sys_common/thread_local.rs
src/libstd/sys_common/thread_local.rs
+1
-1
src/libstd/thread/mod.rs
src/libstd/thread/mod.rs
+1
-1
未找到文件。
src/libstd/io/lazy.rs
浏览文件 @
31bec788
...
...
@@ -15,6 +15,7 @@
use
sys_common
::
mutex
::
Mutex
;
pub
struct
Lazy
<
T
>
{
// We never call `lock.init()`, so it is UB to attempt to acquire this mutex reentrantly!
lock
:
Mutex
,
ptr
:
Cell
<*
mut
Arc
<
T
>>
,
init
:
fn
()
->
Arc
<
T
>
,
...
...
@@ -29,8 +30,6 @@ impl<T: Send + Sync + 'static> Lazy<T> {
/// Safety: `init` must not call `get` on the variable that is being
/// initialized.
pub
const
unsafe
fn
new
(
init
:
fn
()
->
Arc
<
T
>
)
->
Lazy
<
T
>
{
// `lock` is never initialized fully, so it is UB to attempt to
// acquire this mutex reentrantly!
Lazy
{
lock
:
Mutex
::
new
(),
ptr
:
Cell
::
new
(
ptr
::
null_mut
()),
...
...
src/libstd/sys/unix/args.rs
浏览文件 @
31bec788
...
...
@@ -80,7 +80,7 @@ mod imp {
static
mut
ARGC
:
isize
=
0
;
static
mut
ARGV
:
*
const
*
const
u8
=
ptr
::
null
();
//
`ENV_LOCK` is never initialized fully
, so it is UB to attempt to
//
We never call `ENV_LOCK.init()`
, so it is UB to attempt to
// acquire this mutex reentrantly!
static
LOCK
:
Mutex
=
Mutex
::
new
();
...
...
src/libstd/sys/unix/os.rs
浏览文件 @
31bec788
...
...
@@ -33,7 +33,7 @@
use
vec
;
const
TMPBUF_SZ
:
usize
=
128
;
//
`ENV_LOCK` is never initialized fully
, so it is UB to attempt to
//
We never call `ENV_LOCK.init()`
, so it is UB to attempt to
// acquire this mutex reentrantly!
static
ENV_LOCK
:
Mutex
=
Mutex
::
new
();
...
...
src/libstd/sys_common/at_exit_imp.rs
浏览文件 @
31bec788
...
...
@@ -23,7 +23,7 @@
// on poisoning and this module needs to operate at a lower level than requiring
// the thread infrastructure to be in place (useful on the borders of
// initialization/destruction).
//
`LOCK` is never initialized fully
, so it is UB to attempt to
//
We never call `LOCK.init()`
, so it is UB to attempt to
// acquire this mutex reentrantly!
static
LOCK
:
Mutex
=
Mutex
::
new
();
static
mut
QUEUE
:
*
mut
Queue
=
ptr
::
null_mut
();
...
...
src/libstd/sys_common/mutex.rs
浏览文件 @
31bec788
...
...
@@ -32,7 +32,9 @@ pub const fn new() -> Mutex { Mutex(imp::Mutex::new()) }
/// Prepare the mutex for use.
///
/// This should be called once the mutex is at a stable memory address.
/// Behavior is undefined unless this is called before any other operation.
/// If called, this must be the very first thing that happens to the mutex.
/// Calling it in parallel with or after any operation (including another
/// `init()`) is undefined behavior.
#[inline]
pub
unsafe
fn
init
(
&
mut
self
)
{
self
.0
.init
()
}
...
...
src/libstd/sys_common/thread_local.rs
浏览文件 @
31bec788
...
...
@@ -161,7 +161,7 @@ unsafe fn lazy_init(&self) -> usize {
// Additionally a 0-index of a tls key hasn't been seen on windows, so
// we just simplify the whole branch.
if
imp
::
requires_synchronized_create
()
{
//
`INIT_LOCK` is never initialized fully
, so it is UB to attempt to
//
We never call `INIT_LOCK.init()`
, so it is UB to attempt to
// acquire this mutex reentrantly!
static
INIT_LOCK
:
Mutex
=
Mutex
::
new
();
let
_
guard
=
INIT_LOCK
.lock
();
...
...
src/libstd/thread/mod.rs
浏览文件 @
31bec788
...
...
@@ -940,7 +940,7 @@ pub fn park_timeout(dur: Duration) {
impl
ThreadId
{
// Generate a new unique thread ID.
fn
new
()
->
ThreadId
{
//
`GUARD` is never initialized fully
, so it is UB to attempt to
//
We never call `GUARD.init()`
, so it is UB to attempt to
// acquire this mutex reentrantly!
static
GUARD
:
mutex
::
Mutex
=
mutex
::
Mutex
::
new
();
static
mut
COUNTER
:
u64
=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录