also marked the variable as volatile as this is something that is often done when you have concurrent access
the new code tries a little harder not to create multiple DescriptorLoaders. The old code could have queued up multiple threads where l was null and then each got the synchronization lock in turn and then created a fresh DescriptorLoader.