aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenoit Germain <bnt.germain@gmail.com>2013-10-25 10:46:59 +0200
committerBenoit Germain <bnt.germain@gmail.com>2013-10-25 10:46:59 +0200
commita00a9345456762a132dc19b6a470c55d55b064f9 (patch)
tree2b9f57b8094ae90fc77e17c8874d175132dd8fce /src
parente7f70c05b63356232957a3205c6c605f0839605b (diff)
downloadlanes-a00a9345456762a132dc19b6a470c55d55b064f9.tar.gz
lanes-a00a9345456762a132dc19b6a470c55d55b064f9.tar.bz2
lanes-a00a9345456762a132dc19b6a470c55d55b064f9.zip
Don't call on_state_create in keeper states, as it is no longer necessary
Diffstat (limited to 'src')
-rw-r--r--src/keeper.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/src/keeper.c b/src/keeper.c
index c9b2039..e379172 100644
--- a/src/keeper.c
+++ b/src/keeper.c
@@ -567,31 +567,27 @@ void close_keepers( void)
567*/ 567*/
568char const* init_keepers( lua_State* L) 568char const* init_keepers( lua_State* L)
569{ 569{
570 int i, on_state_create; 570 int i;
571 void* allocUD;
572 lua_Alloc allocF = lua_getallocf( L, &allocUD);
573
571 STACK_CHECK( L); 574 STACK_CHECK( L);
572 lua_getfield( L, 1, "nb_keepers"); 575 lua_getfield( L, 1, "nb_keepers");
573 GNbKeepers = lua_tointeger( L, -1); 576 GNbKeepers = lua_tointeger( L, -1);
574 lua_pop( L, 1); 577 lua_pop( L, 1);
575 STACK_MID( L, 0); 578 STACK_END( L, 0);
576 assert( GNbKeepers >= 1); 579 assert( GNbKeepers >= 1);
577 580
578 lua_getfield( L, 1, "on_state_create");
579 on_state_create = lua_isnil( L, -1) ? -1 : lua_absindex( L, -1);
580
581 GKeepers = malloc( GNbKeepers * sizeof( struct s_Keeper)); 581 GKeepers = malloc( GNbKeepers * sizeof( struct s_Keeper));
582 for( i = 0; i < GNbKeepers; ++ i) 582 for( i = 0; i < GNbKeepers; ++ i)
583 { 583 {
584 lua_State* K; 584 lua_State* K = lua_newstate( allocF, allocUD);
585 DEBUGSPEW_CODE( fprintf( stderr, INDENT_BEGIN "### init_keepers %d BEGIN\n" INDENT_END, i)); 585 if( K == NULL)
586 DEBUGSPEW_CODE( ++ debugspew_indent_depth); 586 {
587 // we don't need any libs in the keeper states 587 (void) luaL_error( L, "'lua_newstate()' failed while creating keeper state; out of memory");
588 K = luaG_newstate( L, on_state_create, NULL); 588 }
589
590 STACK_CHECK( K); 589 STACK_CHECK( K);
591 590
592 DEBUGSPEW_CODE( fprintf( stderr, INDENT_BEGIN "### init_keepers %d END\n" INDENT_END, i));
593 DEBUGSPEW_CODE( -- debugspew_indent_depth);
594
595 // to see VM name in Decoda debugger 591 // to see VM name in Decoda debugger
596 lua_pushliteral( K, "Keeper #"); 592 lua_pushliteral( K, "Keeper #");
597 lua_pushinteger( K, i + 1); 593 lua_pushinteger( K, i + 1);
@@ -606,14 +602,11 @@ char const* init_keepers( lua_State* L)
606 STACK_END( K, 0); 602 STACK_END( K, 0);
607 MUTEX_INIT( &GKeepers[i].lock_); 603 MUTEX_INIT( &GKeepers[i].lock_);
608 GKeepers[i].L = K; 604 GKeepers[i].L = K;
609 //GKeepers[i].count = 0;
610 } 605 }
611 lua_pop( L, 1);
612 STACK_END( L, 0);
613#if HAVE_KEEPER_ATEXIT_DESINIT 606#if HAVE_KEEPER_ATEXIT_DESINIT
614 atexit( atexit_close_keepers); 607 atexit( atexit_close_keepers);
615#endif // HAVE_KEEPER_ATEXIT_DESINIT 608#endif // HAVE_KEEPER_ATEXIT_DESINIT
616 return NULL; // ok 609 return NULL; // ok
617} 610}
618 611
619struct s_Keeper* keeper_acquire( void const* ptr) 612struct s_Keeper* keeper_acquire( void const* ptr)