FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
DirectXShaderCompiler/lib/Support/Unix/ThreadLocal.inc at main · microsoft/DirectXShaderCompiler · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
microsoft
/
DirectXShaderCompiler
Public
Notifications
You must be signed in to change notification settings
Fork
897
Star
3.6k
Code
Issues
654
Pull requests
141
Discussions
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
DirectXShaderCompiler
/
lib
/
Support
/
Unix
/
ThreadLocal.inc
Copy path
More file actions
More file actions
Latest commit
History
History
History
69 lines (59 loc) · 2.16 KB
Breadcrumbs
DirectXShaderCompiler
/
lib
/
Support
/
Unix
/
ThreadLocal.inc
Copy path
File metadata and controls
69 lines (59 loc) · 2.16 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
=== llvm/Support/Unix/ThreadLocal.inc - Unix Thread Local Data -*- C++ -*-===//
//
//
The LLVM Compiler Infrastructure
//
//
This file is distributed under the University of Illinois Open Source
//
License. See LICENSE.TXT for details.
//
//
===----------------------------------------------------------------------===//
//
//
This file implements the Unix specific (non-pthread) ThreadLocal class.
//
//
===----------------------------------------------------------------------===//
//
===----------------------------------------------------------------------===//
//
=== WARNING: Implementation here must contain only generic UNIX code that
//
=== is guaranteed to work on *all* UNIX variants.
//
===----------------------------------------------------------------------===//
#
if
defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_GETSPECIFIC)
#
include
<
cassert
>
#
include
<
pthread.h
>
#
include
<
stdlib.h
>
namespace
llvm
{
using
namespace
sys
;
ThreadLocalImpl::ThreadLocalImpl
() : data() {
static_assert
(
sizeof
(
pthread_key_t
) <=
sizeof
(data),
"
size too big
"
);
pthread_key_t
* key =
reinterpret_cast
<
pthread_key_t
*>(&data);
int
errorcode =
pthread_key_create
(key,
nullptr
);
assert
(errorcode ==
0
);
(
void
) errorcode;
}
ThreadLocalImpl::~ThreadLocalImpl
() {
pthread_key_t
* key =
reinterpret_cast
<
pthread_key_t
*>(&data);
int
errorcode =
pthread_key_delete
(*key);
assert
(errorcode ==
0
);
(
void
) errorcode;
}
void
ThreadLocalImpl::setInstance
(
const
void
* d) {
pthread_key_t
* key =
reinterpret_cast
<
pthread_key_t
*>(&data);
int
errorcode =
pthread_setspecific
(*key, d);
assert
(errorcode ==
0
);
(
void
) errorcode;
}
void
*
ThreadLocalImpl::getInstance
() {
pthread_key_t
* key =
reinterpret_cast
<
pthread_key_t
*>(&data);
return
pthread_getspecific
(*key);
}
void
ThreadLocalImpl::removeInstance
() {
setInstance
(
nullptr
);
}
}
#
else
namespace
llvm
{
using
namespace
sys
;
ThreadLocalImpl::ThreadLocalImpl
() : data() { }
ThreadLocalImpl::~ThreadLocalImpl
() { }
void
ThreadLocalImpl::setInstance
(
const
void
* d) { data =
const_cast
<
void
*>(d);}
void
*
ThreadLocalImpl::getInstance
() {
return
data; }
void
ThreadLocalImpl::removeInstance
() {
setInstance
(
0
); }
}
#
endif
Back
|
FazBrowse Home
|
New Git URL