Code::Blocks Forums

Developer forums (C::B DEVELOPMENT STRICTLY!) => Development => CodeCompletion redesign => Topic started by: oBFusCATed on December 02, 2012, 04:04:53 pm

Title: Possible crash during project close?
Post by: oBFusCATed on December 02, 2012, 04:04:53 pm
I'm trying to implement multple-select-project-close feature, but I've got a pretty strange crash in the CC.

Here is the patch:
Code
Index: src/sdk/projectmanager.cpp
===================================================================
--- src/sdk/projectmanager.cpp  (revision 8644)
+++ src/sdk/projectmanager.cpp  (working copy)
@@ -2325,23 +2325,37 @@ void ProjectManager::OnSaveProject(wxCommandEvent& WXUNUSED(event))

 void ProjectManager::OnCloseProject(wxCommandEvent& WXUNUSED(event))
 {
-    wxTreeItemId sel = GetTreeSelection();
-    if (!sel.IsOk())
+    if (m_IsLoadingProject)
+    {
+        wxBell();
         return;
+    }

-    FileTreeData* ftd = (FileTreeData*)m_pTree->GetItemData(sel);
-    cbProject *proj = 0;
-    if (ftd)
-        proj = ftd->GetProject();
+    wxArrayTreeItemIds selections;
+    int count = m_pTree->GetSelections(selections);
+    if (count == 0)
+        return;
+    std::set<cbProject*> projectsToClose;

-    if (proj)
+    for (size_t ii = 0; ii < selections.GetCount(); ++ii)
     {
-        if (m_IsLoadingProject || proj->GetCurrentlyCompilingTarget())
-            wxBell();
-        else
-            CloseProject(proj);
+        FileTreeData *ftd = reinterpret_cast<FileTreeData*>(m_pTree->GetItemData(selections[ii]));
+        if (ftd->GetKind() != FileTreeData::ftdkProject)
+            continue;
+
+        cbProject *project = ftd->GetProject();
+        if (project)
+        {
+            if (project->GetCurrentlyCompilingTarget())
+                wxBell();
+            else
+                projectsToClose.insert(project);
+        }
     }

+    for (std::set<cbProject*>::iterator it = projectsToClose.begin(); it != projectsToClose.end(); ++it)
+        CloseProject(*it);
+
     if (m_pProjects->GetCount() > 0 && !m_pActiveProject)
         SetProject(m_pProjects->Item(0), false);

Index: src/plugins/codecompletion/nativeparser.cpp
===================================================================
--- src/plugins/codecompletion/nativeparser.cpp (revision 8644)
+++ src/plugins/codecompletion/nativeparser.cpp (working copy)
@@ -2427,6 +2427,8 @@ void NativeParser::OnParserStart(wxCommandEvent& event)
     TRACE(_T("NativeParser::OnParserStart()"));

     cbProject* project = static_cast<cbProject*>(event.GetClientData());
+    if (!Manager::Get()->GetProjectManager()->IsProjectStillOpen(project))
+        project = nullptr;
     wxString   prj     = (project ? project->GetTitle() : _T("*NONE*"));
     const ParserCommon::ParserState state = static_cast<ParserCommon::ParserState>(event.GetInt());

The crash I've got was at this line "wxString   prj     = (project ? project->GetTitle() : _T("*NONE*"));"
I couldn't reproduce the crash unfortunately and I can't get you a backtrace.
Can someone of the CC gurus comment on this crash?
Title: Re: Possible crash during project close?
Post by: ollydbg on December 03, 2012, 08:54:55 am
Apply this patch, and try the CB workspace, and multi-select a lot of cbp, and context menu-> close project..... But no crash here. :)
Title: Re: Possible crash during project close?
Post by: oBFusCATed on December 03, 2012, 09:34:35 am
I suppose the timing is pretty important... :(
Title: Re: Possible crash during project close?
Post by: MortenMacFly on December 03, 2012, 12:47:57 pm
But no crash here. :)
Same here: No crash. But I recall I had that seen line in the crash logs already... just a different use case. I just have no idea what could go wrong except that the pointer is not "nulled" correctly. But how (and actually where) would you do that if a project is deleted?
Title: Re: Possible crash during project close?
Post by: oBFusCATed on December 03, 2012, 01:09:33 pm
I suppose, I've got the crash by chance and now it won't happen for 1000 tries.

Is there some detection if a project is closed in CC? I see some timers, so if something like this happens:

1. detect if project is valid -> start CC for project on a timer
2. project is closed
3. timer starts executing

I'm sure it will be pretty nasty. I guess, the CC should be stopped and restarted if a project close is detected.
Title: Re: Possible crash during project close?
Post by: oBFusCATed on December 03, 2012, 04:32:21 pm
I've just got a similar crash.

Steps:
1. load a multi project workspace
2. start closing projects from bottom to top
Title: Re: Possible crash during project close?
Post by: MortenMacFly on December 03, 2012, 08:20:24 pm
I guess, the CC should be stopped and restarted if a project close is detected.
It does that. cbEVT_PROJECT_CLOSE is connected with CodeCompletion::OnProjectClosed, where the project is removed from the/all parsers.
Title: Re: Possible crash during project close?
Post by: oBFusCATed on December 09, 2012, 04:37:06 pm
It does that. cbEVT_PROJECT_CLOSE is connected with CodeCompletion::OnProjectClosed, where the project is removed from the/all parsers.
I suppose something else is running on a timer or another thread that uses the same pointer after the project have been close.
My patch is in SVN, lets see if there are more crashes.
Title: Re: Possible crash during project close?
Post by: Martin K. on December 10, 2012, 07:53:45 am
Hi,

I have seen that oBFusCATed is working on the project manager, maybe he is able to have a look on these points too:
1. when i have a project with more files as the project view can show on the screen and try to change some file options (right mouse click -> properties), than the project view scrolls to the bottom of the list after closing the property dialog.
2. when i change for e.g. advanced, use custom commands or the compile/link boxes, than the read only box on the first dialog page will be checked also.
3. sometimes, the lock symbol (for read only files) will not be shown in the list.

everything happens on windows, with 12.11 release.

Martin
Title: Re: Possible crash during project close?
Post by: oBFusCATed on December 10, 2012, 09:13:22 am
I've seen some of these, but please do not hijack topics. If you want to discuss this please start a new one.