Fix for multithreaded access to the symbol table

svn: r11613
This commit is contained in:
Kevin Tew 2008-09-09 15:56:46 +00:00
parent 3e5fda6614
commit c2fe5919c8

View File

@ -375,10 +375,14 @@ scheme_intern_exact_symbol_in_table(Scheme_Hash_Table *symbol_table, int kind, c
mzrt_rwlock_unlock(symbol_table_lock); mzrt_rwlock_unlock(symbol_table_lock);
if (!sym) { if (!sym) {
sym = make_a_symbol(name, len, kind); Scheme_Object *newsymbol;
newsymbol = make_a_symbol(name, len, kind);
/* we must return the result of this symbol bucket call because another
* thread could have inserted the same symbol between the first
* :qsymbol_bucket call above and this one */
mzrt_rwlock_wrlock(symbol_table_lock); mzrt_rwlock_wrlock(symbol_table_lock);
symbol_bucket(symbol_table, name, len, sym); sym = symbol_bucket(symbol_table, name, len, newsymbol);
mzrt_rwlock_unlock(symbol_table_lock); mzrt_rwlock_unlock(symbol_table_lock);
} }