4
4
import java .util .Collections ;
5
5
import java .util .List ;
6
6
import java .util .concurrent .CopyOnWriteArrayList ;
7
+ import java .util .function .Supplier ;
7
8
8
9
import io .netty .util .concurrent .FastThreadLocal ;
9
10
import io .quarkus .arc .CurrentContext ;
10
11
import io .quarkus .arc .CurrentContextFactory ;
11
12
import io .quarkus .arc .InjectableContext ;
12
13
import io .quarkus .arc .InjectableContext .ContextState ;
14
+ import io .quarkus .arc .impl .LazyValue ;
13
15
import io .quarkus .vertx .core .runtime .context .VertxContextSafetyToggle ;
14
16
import io .smallrye .common .vertx .VertxContext ;
15
17
import io .vertx .core .Context ;
@@ -52,7 +54,13 @@ public List<String> keys() {
52
54
private static final class VertxCurrentContext <T extends ContextState > implements CurrentContext <T > {
53
55
54
56
private final String key ;
55
- private final FastThreadLocal <T > fallback = new FastThreadLocal <>();
57
+ private final LazyValue <FastThreadLocal <T >> fallback = new LazyValue <>(
58
+ new Supplier <>() {
59
+ @ Override
60
+ public FastThreadLocal <T > get () {
61
+ return new FastThreadLocal <>();
62
+ }
63
+ });
56
64
57
65
private VertxCurrentContext (String key ) {
58
66
this .key = key ;
@@ -64,7 +72,7 @@ public T get() {
64
72
if (context != null && VertxContext .isDuplicatedContext (context )) {
65
73
return context .getLocal (key );
66
74
}
67
- return fallback .get ();
75
+ return fallback .get (). get () ;
68
76
}
69
77
70
78
@ Override
@@ -80,7 +88,7 @@ public void set(T state) {
80
88
}
81
89
82
90
} else {
83
- fallback .set (state );
91
+ fallback .get (). set (state );
84
92
}
85
93
}
86
94
@@ -91,7 +99,7 @@ public void remove() {
91
99
// NOOP - the DC should not be shared.
92
100
// context.removeLocal(key);
93
101
} else {
94
- fallback .remove ();
102
+ fallback .get (). remove ();
95
103
}
96
104
}
97
105
0 commit comments