Vuo 2.4.4
Loading...
Searching...
No Matches
VuoCompositionState.c
Go to the documentation of this file.
1
10#include <dlfcn.h>
11#include "VuoCompositionState.h"
12
17{
18 struct VuoCompositionState *compositionState = (struct VuoCompositionState *)malloc(sizeof(struct VuoCompositionState));
19 compositionState->runtimeState = runtimeState;
21 return compositionState;
22}
23
28{
29 return compositionState->runtimeState;
30}
31
36{
37 return compositionState->compositionIdentifier;
38}
39
43void vuoFreeCompositionState(struct VuoCompositionState *compositionState)
44{
45 free(compositionState);
46}
47
52
56static 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
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
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
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");
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}