magro / kryo-serializers

More kryo serializers
Apache License 2.0
381 stars 120 forks source link

SynchronizedCollectionsSerializer doesn't synchronize iteration #96

Closed elrodro83 closed 5 years ago

elrodro83 commented 6 years ago

When serializing an object that has a field with a synchronizedList (https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#synchronizedList(java.util.List)), the serialization fails if items are added to that list concurrently.

Caused by: java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) ~[?:1.8.0_144]
    at java.util.ArrayList$Itr.next(ArrayList.java:851) ~[?:1.8.0_144]
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:99) ~[kryo-shaded-4.0.0.jar:?]
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:40) ~[kryo-shaded-4.0.0.jar:?]
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) ~[kryo-shaded-4.0.0.jar:?]
    at de.javakaffee.kryoserializers.SynchronizedCollectionsSerializer.write(SynchronizedCollectionsSerializer.java:80) ~[kryo-serializers-0.38.jar:?]
...

According to the javadoc of Collections#synchronizedList, the iteration has to be synchronized.

Pr0methean commented 5 years ago

PR #97 fixes this.

magro commented 5 years ago

Closed with #97