@@ -159,9 +159,14 @@ public ObserverBuilder observerFlags(int flags) {
159159 public FlecsObserver iter (Query .IterCallback callback ) {
160160 this .iterCallback = callback ;
161161
162+ final Iter [] iterHolder = new Iter [1 ];
162163 MemorySegment callbackStub = ecs_iter_action_t .allocate (it -> {
163- Iter iter = new Iter (it , this .world );
164- callback .accept (iter );
164+ if (iterHolder [0 ] == null ) {
165+ iterHolder [0 ] = new Iter (it , this .world );
166+ } else {
167+ iterHolder [0 ].setNativeIter (it );
168+ }
169+ callback .accept (iterHolder [0 ]);
165170 }, this .world .arena ());
166171
167172 ecs_observer_desc_t .callback (this .desc , callbackStub );
@@ -172,9 +177,14 @@ public FlecsObserver iter(Query.IterCallback callback) {
172177 public FlecsObserver run (Query .RunCallback callback ) {
173178 this .runCallback = callback ;
174179
180+ final Iter [] iterHolder = new Iter [1 ];
175181 MemorySegment callbackStub = ecs_run_action_t .allocate (it -> {
176- Iter iter = new Iter (it , this .world );
177- callback .accept (iter );
182+ if (iterHolder [0 ] == null ) {
183+ iterHolder [0 ] = new Iter (it , this .world );
184+ } else {
185+ iterHolder [0 ].setNativeIter (it );
186+ }
187+ callback .accept (iterHolder [0 ]);
178188 }, this .world .arena ());
179189
180190 ecs_observer_desc_t .run (this .desc , callbackStub );
0 commit comments