aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbenoit-germain <bnt.germain@gmail.com>2012-08-10 20:49:54 +0300
committerbenoit-germain <bnt.germain@gmail.com>2012-08-10 20:49:54 +0300
commit06856ef8b225208a21abf313aaf51905352c6e9d (patch)
tree78816851f134d33b331b91b6617486f1d227089a /src
parent32aa7012099d6a4b714aef27ab9dbacbdb728c1f (diff)
downloadlanes-06856ef8b225208a21abf313aaf51905352c6e9d.tar.gz
lanes-06856ef8b225208a21abf313aaf51905352c6e9d.tar.bz2
lanes-06856ef8b225208a21abf313aaf51905352c6e9d.zip
Yet another shutdown crash fix
Perform keeper desinit in two stages, in case the keeper state being closed contains a reference to a linda bound to a previously desinitialized keeper, causing it to be destroyed after its keeper state. (occurs only for applications using more than one keeper).
Diffstat (limited to 'src')
-rw-r--r--src/keeper.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/keeper.c b/src/keeper.c
index 28dc338..4e2beb7 100644
--- a/src/keeper.c
+++ b/src/keeper.c
@@ -66,9 +66,13 @@ static int GNbKeepers = 0;
66static void atexit_close_keepers(void) 66static void atexit_close_keepers(void)
67{ 67{
68 int i; 68 int i;
69 // 2-pass close, in case a keeper holds a reference to a linda bound to another keeoer
69 for( i = 0; i < GNbKeepers; ++ i) 70 for( i = 0; i < GNbKeepers; ++ i)
70 { 71 {
71 lua_close( GKeepers[i].L); 72 lua_close( GKeepers[i].L);
73 }
74 for( i = 0; i < GNbKeepers; ++ i)
75 {
72 GKeepers[i].L = 0; 76 GKeepers[i].L = 0;
73 //assert( GKeepers[i].count == 0); 77 //assert( GKeepers[i].count == 0);
74 MUTEX_FREE( &GKeepers[i].lock_); 78 MUTEX_FREE( &GKeepers[i].lock_);