code: private Map<String, String> getBaseStatus(ServletContext servletContext) {
          if (baseStatus == null) {
              synchronized (baseStatusLock) {
                  if (baseStatus == null) {
                      try {
                          baseStatus = Collections.unmodifiableMap(ManifestUtil.getVersionAttributes(servletContext));
                      } catch (IOException e) {
                          log.errorFailedToReadManifest(servletContext.getContextPath(), e);
                          /* We do not want to try to read the manifest again */
                          baseStatus = Collections.emptyMap();
                      }
                  }
              }
          }
          return baseStatus;
      }
docs: This supposes that for the lifetime of the application, the data we extract from the servlet context do not
  change (and indeed they shouldn't because we use the servlet context to get at the web application's manifest
  file.
  <p>
  This returns an immutable map - therefore, to enhance the result, a copy is needed.
  
  @param servletContext the servlet context to initialize the baseStatus map from. Used only the first time this
  method is called.
  @return an immutable map holding the status entries obtained from the manifest.