Source:
<code>public void start(final BundleContext context) throws Exception { super.start(context); pluginId = context.getBundle().getSymbolicName(); FS.setAsyncFileStoreAttributes(true); SystemReader.setInstance( new EclipseSystemReader(SystemReader.getInstance())); Config.setTypedConfigGetter(new ReportingTypedConfigGetter()); Dictionary<String, String> props = new Hashtable<>(4); props.put(DebugOptions.LISTENER_SYMBOLICNAME, pluginId); context.registerService(DebugOptionsListener.class.getName(), this, props); setupHttp(); SshPreferencesMirror.INSTANCE.start(); proxyServiceTracker = new ServiceTracker<>(context, IProxyService.class.getName(), null); proxyServiceTracker.open(); setupSSH(context); preferenceChangeListener = event -> { if (GitCorePreferences.core_sshClient.equals(event.getKey())) { setupSSH(getBundle().getBundleContext()); } else if (GitCorePreferences.core_httpClient .equals(event.getKey())) { setupHttp(); } }; InstanceScope.INSTANCE.getNode(pluginId) .addPreferenceChangeListener(preferenceChangeListener); setupProxy(); repositoryCache = new RepositoryCache(); indexDiffCache = new IndexDiffCache(); <START> Job.create("Reconfiguring window cache for EGit", (monitor) -> { END> try { GitProjectData.reconfigureWindowCache(); } catch (RuntimeException e) { logError(CoreText.Activator_ReconfigureWindowCacheError, e); } }).schedule(); GitProjectData.attachToWorkspace(); setupResourceRefresh(); repositoryUtil = new RepositoryUtil(); secureStore = new EGitSecureStore(SecurePreferencesFactory.getDefault()); registerAutoShareProjects(); registerAutoIgnoreDerivedResources(); registerPreDeleteResourceChangeListener(); registerMergeStrategyRegistryListener(); registerBuiltinLFS(); }</code><technical_language>This mean, access WindowCache started *before* job runs *not* settings current workspace. In worst case this lead crashes Linux / Windows, mmap access configured differently expected</technical_language>

Target:
public void start(final BundleContext context) throws Exception { super.start(context); pluginId = context.getBundle().getSymbolicName(); Job createCache = Job.create("Reconfiguring window cache for EGit", (monitor) -> { try { GitProjectData.reconfigureWindowCache(); } catch (RuntimeException e) { logError(CoreText.Activator_ReconfigureWindowCacheError, e); } }); FS.FileStoreAttributes.setBackground(true); SystemReader.setInstance( new EclipseSystemReader(SystemReader.getInstance())); Config.setTypedConfigGetter(new ReportingTypedConfigGetter()); Dictionary<String, String> props = new Hashtable<>(4); props.put(DebugOptions.LISTENER_SYMBOLICNAME, pluginId); context.registerService(DebugOptionsListener.class.getName(), this, props); setupHttp(); SshPreferencesMirror.INSTANCE.start(); proxyServiceTracker = new ServiceTracker<>(context, IProxyService.class.getName(), null); proxyServiceTracker.open(); setupSSH(context); preferenceChangeListener = event -> { if (GitCorePreferences.core_sshClient.equals(event.getKey())) { setupSSH(getBundle().getBundleContext()); } else if (GitCorePreferences.core_httpClient .equals(event.getKey())) { setupHttp(); } }; InstanceScope.INSTANCE.getNode(pluginId) .addPreferenceChangeListener(preferenceChangeListener); setupProxy(); repositoryCache = new RepositoryCache(); indexDiffCache = new IndexDiffCache(); createCache.schedule(); GitProjectData.attachToWorkspace(); setupResourceRefresh(); repositoryUtil = new RepositoryUtil(); secureStore = new EGitSecureStore(SecurePreferencesFactory.getDefault()); registerAutoShareProjects(); registerAutoIgnoreDerivedResources(); registerPreDeleteResourceChangeListener(); registerMergeStrategyRegistryListener(); registerBuiltinLFS(); createCache.join(); }