- SymbolTable& symbolTable = *object->symbolTable();
- SymbolTable::iterator iter = symbolTable.find(propertyName.publicName());
- if (iter == symbolTable.end())
- return false;
- bool wasFat;
- SymbolTableEntry::Fast fastEntry = iter->value.getFast(wasFat);
- ASSERT(!fastEntry.isNull());
- if (fastEntry.isReadOnly()) {
- if (shouldThrow)
- throwTypeError(exec, StrictModeReadonlyPropertyWriteError);
- return true;
+ WriteBarrierBase<Unknown>* reg;
+ {
+ SymbolTable& symbolTable = *object->symbolTable();
+ // FIXME: This is very suspicious. We shouldn't need a GC-safe lock here.
+ // https://bugs.webkit.org/show_bug.cgi?id=134601
+ GCSafeConcurrentJITLocker locker(symbolTable.m_lock, exec->vm().heap);
+ SymbolTable::Map::iterator iter = symbolTable.find(locker, propertyName.uid());
+ if (iter == symbolTable.end(locker))
+ return false;
+ bool wasFat;
+ SymbolTableEntry::Fast fastEntry = iter->value.getFast(wasFat);
+ ASSERT(!fastEntry.isNull());
+ if (fastEntry.isReadOnly()) {
+ if (shouldThrow)
+ throwTypeError(exec, StrictModeReadonlyPropertyWriteError);
+ return true;
+ }
+ if (VariableWatchpointSet* set = iter->value.watchpointSet()) {
+ // FIXME: It's strange that we're doing this while holding the symbol table's lock.
+ // https://bugs.webkit.org/show_bug.cgi?id=134601
+ set->notifyWrite(vm, value);
+ }
+ reg = &object->registerAt(fastEntry.getIndex());