* files for more information.
*/
+#include <stdio.h>
+#include <stdlib.h>
+
#include "sbcl.h"
#include "runtime.h"
#include "globals.h"
if(!sym->tls_index) {
lispobj *tls_index_lock=
&((struct symbol *)native_pointer(TLS_INDEX_LOCK))->value;
- clear_pseudo_atomic_interrupted(th);
+ FSHOW_SIGNAL((stderr, "entering dynbind tls alloc\n"));
set_pseudo_atomic_atomic(th);
get_spinlock(tls_index_lock,(long)th);
if(!sym->tls_index) {
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);
+ FSHOW_SIGNAL((stderr, "exiting dynbind tls alloc\n"));
clear_pseudo_atomic_atomic(th);
if (get_pseudo_atomic_interrupted(th))
do_pending_interrupt();
SetTlSymbolValue(symbol, binding->value,thread);
binding->symbol = 0;
+ binding->value = 0;
SetBSP(binding);
}
symbol = binding->symbol;
if (symbol) {
- SetTlSymbolValue(symbol, binding->value,thread);
+ if (symbol != UNBOUND_MARKER_WIDETAG) {
+ SetTlSymbolValue(symbol, binding->value,thread);
+ }
binding->symbol = 0;
+ binding->value = 0;
}
}
SetBSP(binding);