projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.16.21: lose informatively when the tls is full
[sbcl.git]
/
src
/
runtime
/
dynbind.c
diff --git
a/src/runtime/dynbind.c
b/src/runtime/dynbind.c
index
5bed359
..
77dfd88
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);
@@
-95,7
+98,9
@@
unbind_to_here(lispobj *bsp,void *th)
symbol = binding->symbol;
if (symbol) {
symbol = binding->symbol;
if (symbol) {
- SetTlSymbolValue(symbol, binding->value,thread);
+ if (symbol != UNBOUND_MARKER_WIDETAG) {
+ SetTlSymbolValue(symbol, binding->value,thread);
+ }
binding->symbol = 0;
}
}
binding->symbol = 0;
}
}