@@ -28,8 +28,7 @@ public static void Callback(Iter it)
2828 public static void Iter ( ecs_iter_t * iter , Ecs . IterCallback callback )
2929 {
3030 Ecs . TableLock ( iter ->world , iter ->table ) ;
31- callback ( new Iter ( iter ) ) ;
32- Ecs . TableUnlock ( iter ->world , iter ->table ) ;
31+ try { callback ( new Iter ( iter ) ) ; } finally { Ecs . TableUnlock ( iter ->world , iter ->table ) ; }
3332 }
3433
3534 /// <summary>
@@ -42,11 +41,10 @@ public static void Each(ecs_iter_t* iter, Ecs.EachEntityCallback callback)
4241 Ecs . Assert ( iter ->entities != null , "No entities returned, use Iter() or Each() without the entity argument instead." ) ;
4342
4443 Ecs . TableLock ( iter ->world , iter ->table ) ;
45-
46- for ( int i = 0 ; i < iter ->count ; i ++ )
47- callback ( new Entity ( iter ->world , iter ->entities [ i ] ) ) ;
48-
49- Ecs . TableUnlock ( iter ->world , iter ->table ) ;
44+ try {
45+ for ( int i = 0 ; i < iter ->count ; i ++ )
46+ callback ( new Entity ( iter ->world , iter ->entities [ i ] ) ) ;
47+ } finally { Ecs . TableUnlock ( iter ->world , iter ->table ) ; }
5048 }
5149
5250 /// <summary>
@@ -57,13 +55,11 @@ public static void Each(ecs_iter_t* iter, Ecs.EachEntityCallback callback)
5755 public static void Each ( ecs_iter_t * iter , Ecs . EachIterCallback callback )
5856 {
5957 Ecs . TableLock ( iter ->world , iter ->table ) ;
60-
61- int count = iter ->count == 0 && iter ->table == null ? 1 : iter ->count ;
62-
63- for ( int i = 0 ; i < count ; i ++ )
64- callback ( new Iter ( iter ) , i ) ;
65-
66- Ecs . TableUnlock ( iter ->world , iter ->table ) ;
58+ try {
59+ int count = iter ->count == 0 && iter ->table == null ? 1 : iter ->count ;
60+ for ( int i = 0 ; i < count ; i ++ )
61+ callback ( new Iter ( iter ) , i ) ;
62+ } finally { Ecs . TableUnlock ( iter ->world , iter ->table ) ; }
6763 }
6864
6965 /// <summary>
@@ -212,8 +208,7 @@ public static void Observe<T>(ecs_iter_t* iter, delegate*<Entity, T*, void> call
212208 public static void Iter ( ecs_iter_t * iter , delegate * < Iter , void > callback )
213209 {
214210 Ecs . TableLock ( iter ->world , iter ->table ) ;
215- callback ( new Iter ( iter ) ) ;
216- Ecs . TableUnlock ( iter ->world , iter ->table ) ;
211+ try { callback ( new Iter ( iter ) ) ; } finally { Ecs . TableUnlock ( iter ->world , iter ->table ) ; }
217212 }
218213
219214 /// <summary>
@@ -226,11 +221,10 @@ public static void Each(ecs_iter_t* iter, delegate*<Entity, void> callback)
226221 Ecs . Assert ( iter ->count > 0 , "No entities returned, use Iter() or Each() without the entity argument instead." ) ;
227222
228223 Ecs . TableLock ( iter ->world , iter ->table ) ;
229-
230- for ( int i = 0 ; i < iter ->count ; i ++ )
231- callback ( new Entity ( iter ->world , iter ->entities [ i ] ) ) ;
232-
233- Ecs . TableUnlock ( iter ->world , iter ->table ) ;
224+ try {
225+ for ( int i = 0 ; i < iter ->count ; i ++ )
226+ callback ( new Entity ( iter ->world , iter ->entities [ i ] ) ) ;
227+ } finally { Ecs . TableUnlock ( iter ->world , iter ->table ) ; }
234228 }
235229
236230 /// <summary>
@@ -241,13 +235,11 @@ public static void Each(ecs_iter_t* iter, delegate*<Entity, void> callback)
241235 public static void Each ( ecs_iter_t * iter , delegate * < Iter , int , void > callback )
242236 {
243237 Ecs . TableLock ( iter ->world , iter ->table ) ;
244-
245- int count = iter ->count == 0 && iter ->table == null ? 1 : iter ->count ;
246-
247- for ( int i = 0 ; i < count ; i ++ )
248- callback ( new Iter ( iter ) , i ) ;
249-
250- Ecs . TableUnlock ( iter ->world , iter ->table ) ;
238+ try {
239+ int count = iter ->count == 0 && iter ->table == null ? 1 : iter ->count ;
240+ for ( int i = 0 ; i < count ; i ++ )
241+ callback ( new Iter ( iter ) , i ) ;
242+ } finally { Ecs . TableUnlock ( iter ->world , iter ->table ) ; }
251243 }
252244
253245 /// <summary>
0 commit comments