aboutsummaryrefslogtreecommitdiff
path: root/src/keeper.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/keeper.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/keeper.c b/src/keeper.c
index 715583b..b67bee2 100644
--- a/src/keeper.c
+++ b/src/keeper.c
@@ -188,7 +188,7 @@ static void push_table( lua_State* L, int idx_)
188 188
189int keeper_push_linda_storage( Universe* U, lua_State* L, void* ptr_, ptrdiff_t magic_) 189int keeper_push_linda_storage( Universe* U, lua_State* L, void* ptr_, ptrdiff_t magic_)
190{ 190{
191 Keeper* const K = keeper_acquire( U->keepers, magic_); 191 Keeper* const K = which_keeper( U->keepers, magic_);
192 lua_State* const KL = K ? K->L : NULL; 192 lua_State* const KL = K ? K->L : NULL;
193 if( KL == NULL) return 0; 193 if( KL == NULL) return 0;
194 STACK_GROW( KL, 4); 194 STACK_GROW( KL, 4);
@@ -233,7 +233,6 @@ int keeper_push_linda_storage( Universe* U, lua_State* L, void* ptr_, ptrdiff_t
233 STACK_END( L, 1); 233 STACK_END( L, 1);
234 lua_pop( KL, 1); // 234 lua_pop( KL, 1); //
235 STACK_END( KL, 0); 235 STACK_END( KL, 0);
236 keeper_release( K);
237 return 1; 236 return 1;
238} 237}
239 238
@@ -715,6 +714,14 @@ void init_keepers( Universe* U, lua_State* L)
715 STACK_END( L, 0); 714 STACK_END( L, 0);
716} 715}
717 716
717// should be called only when inside a keeper_acquire/keeper_release pair (see linda_protected_call)
718Keeper* which_keeper(Keepers* keepers_, ptrdiff_t magic_)
719{
720 int const nbKeepers = keepers_->nb_keepers;
721 unsigned int i = (unsigned int)((magic_ >> KEEPER_MAGIC_SHIFT) % nbKeepers);
722 return &keepers_->keeper_array[i];
723}
724
718Keeper* keeper_acquire( Keepers* keepers_, ptrdiff_t magic_) 725Keeper* keeper_acquire( Keepers* keepers_, ptrdiff_t magic_)
719{ 726{
720 int const nbKeepers = keepers_->nb_keepers; 727 int const nbKeepers = keepers_->nb_keepers;