Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Custom language.settings.xml file is not allways applied on project open

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.

 

Jonah


~~~
Jonah Graham
Kichwa Coders
www.kichwacoders.com

 

 

On Tue, 10 Dec 2019 at 14:37, Popescu, Lidia <lidia.popescu@xxxxxxxxxxxxx> wrote:

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


Back to the top