Let's test and set _marshallers in the same place, and add a comment explaining
our no synchronization at the cost of possibly doing some trivial extra work. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6633 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -78,7 +78,9 @@ public abstract class FieldMarshaller
|
|||||||
public static FieldMarshaller getFieldMarshaller (Field field)
|
public static FieldMarshaller getFieldMarshaller (Field field)
|
||||||
{
|
{
|
||||||
if (_marshallers == null) {
|
if (_marshallers == null) {
|
||||||
createMarshallers();
|
// multiple threads may attempt to create the stock marshallers, but they'll just do
|
||||||
|
// extra work and _marshallers will only ever contain a fully populated table
|
||||||
|
_marshallers = createMarshallers();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if necessary (we're running in a sandbox), look for custom field accessors
|
// if necessary (we're running in a sandbox), look for custom field accessors
|
||||||
@@ -247,12 +249,10 @@ public abstract class FieldMarshaller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates instances of all known field marshaller types and populates the {@link
|
* Creates and returns a mapping for all known field marshaller types.
|
||||||
* #_marshallers} table with them. This is called the first time a marshaller is requested.
|
|
||||||
*/
|
*/
|
||||||
protected static void createMarshallers ()
|
protected static Map<Class<?>, FieldMarshaller> createMarshallers ()
|
||||||
{
|
{
|
||||||
// create our table
|
|
||||||
Map<Class<?>, FieldMarshaller> marshallers = Maps.newHashMap();
|
Map<Class<?>, FieldMarshaller> marshallers = Maps.newHashMap();
|
||||||
|
|
||||||
// create a generic marshaller for streamable instances
|
// create a generic marshaller for streamable instances
|
||||||
@@ -404,7 +404,7 @@ public abstract class FieldMarshaller
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
_marshallers = marshallers;
|
return marshallers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Contains a mapping from field type to field marshaller instance for that type. */
|
/** Contains a mapping from field type to field marshaller instance for that type. */
|
||||||
|
|||||||
Reference in New Issue
Block a user