GRPC Core
4.0.0
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
grpc
support
tls_gcc.h
Go to the documentation of this file.
1
/*
2
*
3
* Copyright 2015, Google Inc.
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions are
8
* met:
9
*
10
* * Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* * Redistributions in binary form must reproduce the above
13
* copyright notice, this list of conditions and the following disclaimer
14
* in the documentation and/or other materials provided with the
15
* distribution.
16
* * Neither the name of Google Inc. nor the names of its
17
* contributors may be used to endorse or promote products derived from
18
* this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*
32
*/
33
34
#ifndef GRPC_SUPPORT_TLS_GCC_H
35
#define GRPC_SUPPORT_TLS_GCC_H
36
37
#include <stdbool.h>
38
39
#include <
grpc/support/log.h
>
40
44
#ifndef NDEBUG
45
46
struct
gpr_gcc_thread_local
{
47
intptr_t
value
;
48
bool
*
inited
;
49
};
50
51
#define GPR_TLS_DECL(name) \
52
static bool name##_inited = false; \
53
static __thread struct gpr_gcc_thread_local name = {0, &(name##_inited)}
54
55
#define gpr_tls_init(tls) \
56
do { \
57
GPR_ASSERT(*((tls)->inited) == false); \
58
*((tls)->inited) = true; \
59
} while (0)
60
62
#define gpr_tls_destroy(tls) \
63
do { \
64
GPR_ASSERT(*((tls)->inited)); \
65
*((tls)->inited) = false; \
66
} while (0)
67
68
#define gpr_tls_set(tls, new_value) \
69
do { \
70
GPR_ASSERT(*((tls)->inited)); \
71
(tls)->value = (new_value); \
72
} while (0)
73
74
#define gpr_tls_get(tls) \
75
({ \
76
GPR_ASSERT(*((tls)->inited)); \
77
(tls)->value; \
78
})
79
80
#else
/* NDEBUG */
81
82
struct
gpr_gcc_thread_local
{
83
intptr_t
value
;
84
};
85
86
#define GPR_TLS_DECL(name) \
87
static __thread struct gpr_gcc_thread_local name = {0}
88
89
#define gpr_tls_init(tls) \
90
do { \
91
} while (0)
92
#define gpr_tls_destroy(tls) \
93
do { \
94
} while (0)
95
#define gpr_tls_set(tls, new_value) (((tls)->value) = (new_value))
96
#define gpr_tls_get(tls) ((tls)->value)
97
98
#endif
/* NDEBUG */
99
100
#endif
/* GRPC_SUPPORT_TLS_GCC_H */
gpr_gcc_thread_local::inited
bool * inited
Definition:
tls_gcc.h:48
gpr_gcc_thread_local
Thread local storage based on gcc compiler primitives.
Definition:
tls_gcc.h:46
gpr_gcc_thread_local::value
intptr_t value
Definition:
tls_gcc.h:47
log.h
Generated on Wed Jun 21 2017 14:13:07 for GRPC Core by
1.8.6