Vuo
2.4.4
Loading...
Searching...
No Matches
runtime
VuoCompositionState.c
Go to the documentation of this file.
1
10
#include <dlfcn.h>
11
#include "
VuoCompositionState.h
"
12
16
struct
VuoCompositionState
*
vuoCreateCompositionState
(
void
*
runtimeState
,
const
char
*
compositionIdentifier
)
17
{
18
struct
VuoCompositionState
*compositionState = (
struct
VuoCompositionState
*)malloc(
sizeof
(
struct
VuoCompositionState
));
19
compositionState->
runtimeState
=
runtimeState
;
20
compositionState->
compositionIdentifier
=
compositionIdentifier
;
21
return
compositionState;
22
}
23
27
void
*
vuoGetCompositionStateRuntimeState
(
struct
VuoCompositionState
*compositionState)
28
{
29
return
compositionState->
runtimeState
;
30
}
31
35
const
char
*
vuoGetCompositionStateCompositionIdentifier
(
struct
VuoCompositionState
*compositionState)
36
{
37
return
compositionState->
compositionIdentifier
;
38
}
39
43
void
vuoFreeCompositionState
(
struct
VuoCompositionState
*compositionState)
44
{
45
free(compositionState);
46
}
47
51
pthread_key_t
vuoCompositionStateKey
;
52
56
static
void
__attribute__((constructor)) compositionStateKey_init(
void
)
57
{
58
int
ret = pthread_key_create(&
vuoCompositionStateKey
, NULL);
59
if
(ret)
60
VUserLog
(
"Couldn't create the key for storing the composition state in thread-local state: %s"
, strerror(errno));
61
}
62
67
void
vuoAddCompositionStateToThreadLocalStorage
(
const
struct
VuoCompositionState
*compositionState)
68
{
69
int
ret = pthread_setspecific(
vuoCompositionStateKey
, compositionState);
70
if
(ret)
71
VUserLog
(
"Couldn't store the composition state in thread-local state: %s"
, strerror(errno));
72
}
73
78
void
vuoRemoveCompositionStateFromThreadLocalStorage
(
void
)
79
{
80
int
ret = pthread_setspecific(
vuoCompositionStateKey
, NULL);
81
if
(ret)
82
VUserLog
(
"Couldn't store a null composition state in thread-local state: %s"
, strerror(errno));
83
}
84
91
void
*
vuoCopyCompositionStateFromThreadLocalStorage
(
void
)
92
{
93
void
*compositionState = pthread_getspecific(
vuoCompositionStateKey
);
94
if
(! compositionState)
95
{
96
void
**
vuoRuntimeState
= (
void
**) dlsym(RTLD_SELF,
"vuoRuntimeState"
);
97
if
(!
vuoRuntimeState
)
98
vuoRuntimeState
= (
void
**) dlsym(RTLD_DEFAULT,
"vuoRuntimeState"
);
99
if
(
vuoRuntimeState
&& *
vuoRuntimeState
)
100
VUserLog
(
"Warning: Couldn't find the composition state in thread-local state."
);
101
return
NULL;
102
}
103
104
struct
VuoCompositionState
*compositionStateCopy = (
struct
VuoCompositionState
*)malloc(
sizeof
(
struct
VuoCompositionState
));
105
compositionStateCopy->
runtimeState
= ((
struct
VuoCompositionState
*)compositionState)->runtimeState;
106
compositionStateCopy->
compositionIdentifier
= NULL;
107
return
compositionStateCopy;
108
}
Generated on Thu Nov 9 2023 16:59:30 for Vuo by
1.9.8