projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.24.42: fix bug 235a
[sbcl.git]
/
src
/
runtime
/
dynbind.c
diff --git
a/src/runtime/dynbind.c
b/src/runtime/dynbind.c
index
f2e51ef
..
1c84e5b
100644
(file)
--- a/
src/runtime/dynbind.c
+++ b/
src/runtime/dynbind.c
@@
-51,6
+51,9
@@
void bind_variable(lispobj symbol, lispobj value, void *th)
sym->tls_index=SymbolValue(FREE_TLS_INDEX,0);
SetSymbolValue(FREE_TLS_INDEX,
make_fixnum(fixnum_value(sym->tls_index)+1),0);
sym->tls_index=SymbolValue(FREE_TLS_INDEX,0);
SetSymbolValue(FREE_TLS_INDEX,
make_fixnum(fixnum_value(sym->tls_index)+1),0);
+ if(fixnum_value(sym->tls_index)>=TLS_SIZE) {
+ lose("Thread local storage exhausted.");
+ }
}
release_spinlock(tls_index_lock);
clear_pseudo_atomic_atomic(th);
}
release_spinlock(tls_index_lock);
clear_pseudo_atomic_atomic(th);
@@
-78,6
+81,7
@@
unbind(void *th)
SetTlSymbolValue(symbol, binding->value,thread);
binding->symbol = 0;
SetTlSymbolValue(symbol, binding->value,thread);
binding->symbol = 0;
+ binding->value = 0;
SetBSP(binding);
}
SetBSP(binding);
}
@@
-99,6
+103,7
@@
unbind_to_here(lispobj *bsp,void *th)
SetTlSymbolValue(symbol, binding->value,thread);
}
binding->symbol = 0;
SetTlSymbolValue(symbol, binding->value,thread);
}
binding->symbol = 0;
+ binding->value = 0;
}
}
SetBSP(binding);
}
}
SetBSP(binding);