Hello
Jonah, all,
Regarding
this topic,
Unfortunately
using
+
storeInPrjArea.refreshLocal(IResource.DEPTH_ZERO,
null);
is
not helping.
It
seems to help , from UI seems to be ok, but in the
Logs I can see following DeadLocks for about every
second project that I open.
The
projects we create are based on existing sources
that has svn. On open, SVN plugin shares them
automatically and this causes following deadlock.
I
suppose both, cdt and svn plugins are trying to
refresh/access same resources at the same time.
!MESSAGE
Deadlock detected. All locks owned by thread main
will be suspended.
java.lang.IllegalStateException
at
org.eclipse.core.internal.jobs.DeadlockDetector.reportDeadlock(DeadlockDetector.java:599)
at
org.eclipse.core.internal.jobs.DeadlockDetector.lockWaitStart(DeadlockDetector.java:403)
at
org.eclipse.core.internal.jobs.LockManager.addLockWaitThread(LockManager.java:154)
at
org.eclipse.core.internal.jobs.OrderedLock.doAcquire(OrderedLock.java:168)
at
org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:106)
at
org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:82)
at
org.eclipse.cdt.internal.core.settings.model.xml.XmlProjectDescriptionStorage.getProjectDescription(XmlProjectDescriptionStorage.java:230)
at
org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescriptionInternal(CProjectDescriptionManager.java:426)
at
org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:408)
at
org.eclipse.cdt.managedbuilder.core.ManagedBuildManager.findBuildInfo(ManagedBuildManager.java:2730)
at
org.eclipse.cdt.managedbuilder.core.ManagedBuildManager.getBuildInfo(ManagedBuildManager.java:2991)
at
org.eclipse.cdt.managedbuilder.core.ManagedBuildManager.getBuildInfo(ManagedBuildManager.java:2946)
at
org.eclipse.cdt.managedbuilder.core.ResourceChangeHandler2$Visitor.visit(ResourceChangeHandler2.java:123)
at
org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:64)
at
org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:75)
at
org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48)
at
org.eclipse.cdt.managedbuilder.core.ResourceChangeHandler2.resourceChanged(ResourceChangeHandler2.java:180)
at
org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:299)
at
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at
org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:289)
at
org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:152)
at
org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:374)
at
org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1469)
at
org.eclipse.core.internal.resources.Project.touch(Project.java:1326)
at
org.eclipse.team.core.RepositoryProvider.map(RepositoryProvider.java:132)
at
org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot.setSharing(SVNWorkspaceRoot.java:229)
at
org.tigris.subversion.subclipse.core.SVNTeamProviderType$AutoShareJob.autoconnectSVNProject(SVNTeamProviderType.java:136)
at
org.tigris.subversion.subclipse.core.SVNTeamProviderType$AutoShareJob.run(SVNTeamProviderType.java:98)
at
org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
!SUBENTRY
1
org.eclipse.core.jobs
4 2 2019-12-12 16:37:41.647
!MESSAGE
Thread Worker-3 has locks: F/DemoProject/.settings,
R/, OrderedLock (7), OrderedLock (0) and is waiting
for lock OrderedLock (11)
!SUBENTRY
1
org.eclipse.core.jobs
4 2 2019-12-12 16:37:41.647
!MESSAGE
Thread main has locks: OrderedLock (11) and is
waiting for lock F/DemoProject/.settings
Not
sure if I can ignore such errors.
I
also found that, at some point the language settings
that I want to apply is removed, when it goes wrong.
And
if I comment following line in yellow, it seems to
solve my problem.
Even
if in the beginning
isStoreInProjectAreaExist = false,but
if the language settings file is not removed, at
some point it is successfully applied.
What
side effect it could cause if I comment this line ?
Or
maybe you have other ideas? How could I postpone
this workflow ? that checks and
loadLanguageSettings()
In
org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer.serializeLanguageSettings(ICProjectDescription
prjDescription)
…
try
{
serializingLock.acquire();
if (!isEqualToDefaultProviders(prjDescription)) {
serializeLanguageSettingsInternal(projectElementStorePrj,
projectElementStoreWsp, prjDescription);
}
// Absent store means default providers as specified
in the toolchain
IFile fileStorePrj = getStoreInProjectArea(project);
boolean isProjectStoreEmpty =
projectElementStorePrj.getChildNodes().getLength() ==
0;
if (isProjectStoreEmpty) {
if (fileStorePrj.exists()) {
//
fileStorePrj.delete(true,
null);
}
} else {
…
Thank
you in advance
Kind
Regards
Lidia
From:
Popescu, Lidia
Sent: Tuesday, December 10, 2019 10:46 PM
To: CDT General developers list.
Subject: RE: [cdt-dev] Custom
language.settings.xml file is not allways
applied on project open
Thanks
Jonah,
Your
snipped seems to help, same as mine where I just
added Thread.sleep() for 5 seconds and re-tried to
get the file and boolean value.
But
I still have to see if it fixes the problem on
someone’s else side, who happens to have it more
often.
I
will let you know then how it goes.
Kind
Regards
Lidia
From:
cdt-dev-bounces@xxxxxxxxxxx
[mailto:cdt-dev-bounces@xxxxxxxxxxx]
On Behalf Of Jonah Graham
Sent: Tuesday, December 10, 2019 10:08 PM
To: CDT General developers list.
Subject: Re: [cdt-dev] Custom
language.settings.xml file is not allways applied on
project open
Hello
Lidia,
Unfortunately
there are indeed some race conditions in the code
- It looks like you have discovered one of them.
If
it is a refresh problem, I wonder if doing the
below would help. Can you try it?
public static void
loadLanguageSettings(ICProjectDescription
prjDescription) {
IProject project =
prjDescription.getProject();
IFile storeInPrjArea =
getStoreInProjectArea(project);
+ try {
+
storeInPrjArea.refreshLocal(IResource.DEPTH_ZERO,
null);
+ } catch (CoreException e1) {
+ }
boolean
isStoreInProjectAreaExist =
storeInPrjArea.exists();
if (isStoreInProjectAreaExist) {
Document doc = null;
Perhaps
that will make sure the state of the file is up to
date. I am not sure what (negative) side effects
there are with doing that here - as a first step
it would be good to know if that resolves the
issue.
Hello
cdt developers,
I
am investigating an issue that randomly occurs
on our side on eclipse for linux, with CDT
9.4.3.
I
am trying to reproduce it on windows, latest
cdt, but I have a bit different behavior.
Could it be a cdt bug ? a race condition
maybe.
We
are generating programmatically some cdt
projects based on existing templates,
including the .settings/language.settings.xml
files, and leave the project closed after
creation.
Then,
when a project is open, our custom language
settings are not always applied, and sometimes
even removed.
I
investigated the problem and I found that
it
happens because it sometimes checks too early
if
.settings/language.settings.xml file
exists, maybe before some refresh jobs
finishes, and the file is not accessible as a
resource, so
isStoreInProjectAreaExist=false,
and it loads defaults configuration for
language settings.
The
loadLanguageSettings() is called

And
it checks
loadLanguageSettings
() {
IFile
storeInPrjArea =
getStoreInProjectArea(project);
boolean
isStoreInProjectAreaExist =
storeInPrjArea.exists();
//
and based on result it loads default language
settigns or custom from existing
.settings/language.settings file
if
(isStoreInProjectAreaExist) {
System.out.println(" >>> Load
from xml file"); . . .
}
else {
System.out.println(" >>> Load
default"); . . .
}
}
That
is a sample of jobs/processes that are
running:
A
bad sample, when our language settings
is not applied:

|
A
good sample when our custom language
settings is applied:

It
goes well when the job ‘Discover
compiler build-in language settings’
is executed and in Project properties
-> C/C++ General -> Preprocessor
Include Paths, macros Page we can
see configuration from our custom
language.setttings.xml
|
I
am not sure yet what process it depends on,
but if I wait a bit and re-request value for
boolean
isStoreInProjectAreaExist =
storeInPrjArea.exists();,
it returns desired true value.
Could
you please help me with this?
I
will try to reproduce it in eclipse oxygen,
with cdt 9.4.3 on windows.
Thank
you
Kind
Regards
Lidia
_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
To change your delivery options, retrieve your
password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/cdt-dev