Skip to content

Commit

Permalink
[Truffle] Synchronize data access in EncodingManager
Browse files Browse the repository at this point in the history
  • Loading branch information
Brandon Fish committed Sep 19, 2016
1 parent 2e0d7ea commit 8ca1751
Showing 1 changed file with 6 additions and 6 deletions.
Expand Up @@ -57,11 +57,11 @@ public static DynamicObject newRubyEncoding(RubyContext context, Encoding encodi
return Layouts.ENCODING.createEncoding(context.getCoreLibrary().getEncodingFactory(), encoding, string, dummy);
}

public List<DynamicObject> getUnsafeEncodingList() {
public synchronized List<DynamicObject> getUnsafeEncodingList() {
return ENCODING_LIST_BY_ENCODING_LIST_INDEX;
}

public DynamicObject getRubyEncoding(Encoding encoding) {
public synchronized DynamicObject getRubyEncoding(Encoding encoding) {
DynamicObject rubyEncoding = ENCODING_LIST_BY_ENCODING_INDEX.get(encoding.getIndex());

if (rubyEncoding == null) {
Expand All @@ -76,17 +76,17 @@ public DynamicObject getRubyEncoding(Encoding encoding) {
}

@TruffleBoundary
public DynamicObject getRubyEncoding(String name) {
public synchronized DynamicObject getRubyEncoding(String name) {
return LOOKUP.get(name.toLowerCase(Locale.ENGLISH));
}

@TruffleBoundary
public DynamicObject getRubyEncoding(int encodingListIndex) {
public synchronized DynamicObject getRubyEncoding(int encodingListIndex) {
return ENCODING_LIST_BY_ENCODING_LIST_INDEX.get(encodingListIndex);
}

@TruffleBoundary
public void defineEncoding(EncodingDB.Entry encodingEntry, byte[] name, int p, int end) {
public synchronized void defineEncoding(EncodingDB.Entry encodingEntry, byte[] name, int p, int end) {
final DynamicObject rubyEncoding = newRubyEncoding(context, null, name, p, end, encodingEntry.isDummy());

assert ENCODING_LIST_BY_ENCODING_LIST_INDEX.size() == encodingEntry.getIndex();
Expand All @@ -95,7 +95,7 @@ public void defineEncoding(EncodingDB.Entry encodingEntry, byte[] name, int p, i
}

@TruffleBoundary
public void defineAlias(int encodingListIndex, String name) {
public synchronized void defineAlias(int encodingListIndex, String name) {
final DynamicObject rubyEncoding = getRubyEncoding(encodingListIndex);

LOOKUP.put(name.toLowerCase(Locale.ENGLISH), rubyEncoding);
Expand Down

0 comments on commit 8ca1751

Please sign in to comment.