What is it about production mode that makes you think it isn't necessary (whereas it would be necessary with development mode)?
sam On Oct 16, 2013 12:27 AM, "Romain Gilles" <[email protected]> wrote: > Hi all, > I add a comment > #19<https://code.google.com/p/google-guice/issues/detail?id=183#c19> on > this issue since April. I would like to know if it's a stupid comment or > not. In fact we fall in some case in a deadlock situation with the class > level lock used by the Singleton scope. And I think in case of production > stage the lock and event the volatile instance field are not required. For > me only development mode require this kind of protection and we always > create our Injector in production stage. > Does it make sens for you? > > Here a code snippet of Singleton Scope (guice 3.0) : > public static final Scope SINGLETON = new Scope() { > public <T> Provider<T> scope(final Key<T> key, final Provider<T> > creator) { > return new Provider<T>() { > /* > * The lazily initialized singleton instance. Once set, this will > either have type T or will > * be equal to NULL. > */ > private volatile Object instance; > > // DCL on a volatile is safe as of Java 5, which we obviously > require. > @SuppressWarnings("DoubleCheckedLocking") > public T get() { > if (instance == null) { > /* > * Use a pretty coarse lock. We don't want to run into > deadlocks > * when two threads try to load circularly-dependent objects. > * Maybe one of these days we will identify independent graphs > of > * objects and offer to load them in parallel. > * > * This block is re-entrant for circular dependencies. > */ > synchronized (InternalInjectorCreator.class) { > if (instance == null) { > T provided = creator.get(); > > // don't remember proxies; these exist only to serve > circular dependencies > if (provided instanceof CircularDependencyProxy) { > return provided; > } > > Object providedOrSentinel = (provided == null) ? NULL : > provided; > if (instance != null && instance != providedOrSentinel) { > throw new ProvisionException( > "Provider was reentrant while creating a singleton"); > } > > instance = providedOrSentinel; > } > } > } > > Object localInstance = instance; > // This is safe because instance has type T or is equal to NULL > @SuppressWarnings("unchecked") > T returnedInstance = (localInstance != NULL) ? (T) localInstance > : null; > return returnedInstance; > } > > Regards, > > Romain. > > -- > You received this message because you are subscribed to the Google Groups > "google-guice" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/google-guice. > For more options, visit https://groups.google.com/groups/opt_out. > -- You received this message because you are subscribed to the Google Groups "google-guice" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/google-guice. For more options, visit https://groups.google.com/groups/opt_out.
