projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.1.18:
[sbcl.git]
/
src
/
runtime
/
dynbind.c
diff --git
a/src/runtime/dynbind.c
b/src/runtime/dynbind.c
index
da22189
..
5bed359
100644
(file)
--- a/
src/runtime/dynbind.c
+++ b/
src/runtime/dynbind.c
@@
-18,6
+18,7
@@
#include "globals.h"
#include "dynbind.h"
#include "thread.h"
#include "globals.h"
#include "dynbind.h"
#include "thread.h"
+#include "pseudo-atomic.h"
#include "genesis/symbol.h"
#include "genesis/binding.h"
#include "genesis/thread.h"
#include "genesis/symbol.h"
#include "genesis/binding.h"
#include "genesis/thread.h"
@@
-33,7
+34,6
@@
void bind_variable(lispobj symbol, lispobj value, void *th)
{
void bind_variable(lispobj symbol, lispobj value, void *th)
{
- lispobj old_tl_value;
struct binding *binding;
struct thread *thread=(struct thread *)th;
binding = GetBSP();
struct binding *binding;
struct thread *thread=(struct thread *)th;
binding = GetBSP();
@@
-44,8
+44,8
@@
void bind_variable(lispobj symbol, lispobj value, void *th)
if(!sym->tls_index) {
lispobj *tls_index_lock=
&((struct symbol *)native_pointer(TLS_INDEX_LOCK))->value;
if(!sym->tls_index) {
lispobj *tls_index_lock=
&((struct symbol *)native_pointer(TLS_INDEX_LOCK))->value;
- SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(0),th);
- SetSymbolValue(PSEUDO_ATOMIC_ATOMIC, make_fixnum(1),th);
+ clear_pseudo_atomic_interrupted(th);
+ set_pseudo_atomic_atomic(th);
get_spinlock(tls_index_lock,(long)th);
if(!sym->tls_index) {
sym->tls_index=SymbolValue(FREE_TLS_INDEX,0);
get_spinlock(tls_index_lock,(long)th);
if(!sym->tls_index) {
sym->tls_index=SymbolValue(FREE_TLS_INDEX,0);
@@
-53,16
+53,15
@@
void bind_variable(lispobj symbol, lispobj value, void *th)
make_fixnum(fixnum_value(sym->tls_index)+1),0);
}
release_spinlock(tls_index_lock);
make_fixnum(fixnum_value(sym->tls_index)+1),0);
}
release_spinlock(tls_index_lock);
- SetSymbolValue(PSEUDO_ATOMIC_ATOMIC, make_fixnum(0),th);
- if (fixnum_value(SymbolValue(PSEUDO_ATOMIC_INTERRUPTED,th)))
+ clear_pseudo_atomic_atomic(th);
+ if (get_pseudo_atomic_interrupted(th))
do_pending_interrupt();
}
}
#endif
do_pending_interrupt();
}
}
#endif
- old_tl_value=SymbolTlValue(symbol,thread);
- binding->value = old_tl_value;
+ binding->value = SymbolTlValue(symbol, thread);
binding->symbol = symbol;
binding->symbol = symbol;
- SetTlSymbolValue(symbol, value,thread);
+ SetTlSymbolValue(symbol, value, thread);
}
void
}
void