@@ -159,14 +159,16 @@ public ObserverBuilder observerFlags(int flags) {
159159 public FlecsObserver iter (Query .IterCallback callback ) {
160160 this .iterCallback = callback ;
161161
162- final Iter [] iterHolder = new Iter [ 1 ] ;
162+ final ThreadLocal < Iter > iterHolder = new ThreadLocal <>() ;
163163 MemorySegment callbackStub = ecs_iter_action_t .allocate (it -> {
164- if (iterHolder [0 ] == null ) {
165- iterHolder [0 ] = new Iter (it , this .world );
164+ Iter iter = iterHolder .get ();
165+ if (iter == null ) {
166+ iter = new Iter (it , this .world );
167+ iterHolder .set (iter );
166168 } else {
167- iterHolder [ 0 ] .setNativeIter (it );
169+ iter .setNativeIter (it );
168170 }
169- callback .accept (iterHolder [ 0 ] );
171+ callback .accept (iter );
170172 }, this .world .arena ());
171173
172174 ecs_observer_desc_t .callback (this .desc , callbackStub );
@@ -177,14 +179,16 @@ public FlecsObserver iter(Query.IterCallback callback) {
177179 public FlecsObserver run (Query .RunCallback callback ) {
178180 this .runCallback = callback ;
179181
180- final Iter [] iterHolder = new Iter [ 1 ] ;
182+ final ThreadLocal < Iter > iterHolder = new ThreadLocal <>() ;
181183 MemorySegment callbackStub = ecs_run_action_t .allocate (it -> {
182- if (iterHolder [0 ] == null ) {
183- iterHolder [0 ] = new Iter (it , this .world );
184+ Iter iter = iterHolder .get ();
185+ if (iter == null ) {
186+ iter = new Iter (it , this .world );
187+ iterHolder .set (iter );
184188 } else {
185- iterHolder [ 0 ] .setNativeIter (it );
189+ iter .setNativeIter (it );
186190 }
187- callback .accept (iterHolder [ 0 ] );
191+ callback .accept (iter );
188192 }, this .world .arena ());
189193
190194 ecs_observer_desc_t .run (this .desc , callbackStub );
0 commit comments