jenndhemus / editra-plugins

Automatically exported from code.google.com/p/editra-plugins
0 stars 0 forks source link

Deleting a folder in Projects crashes Editra #27

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1. Expand a folder in the tree view
2. Right-click the folder and select Move to Trash
3. Watch Editra crash

This has something to do with the background threads that update the icons in 
the tree view.  I 
thought I had this fixed a while ago, but it seems to have creeped back in.

Original issue reported on code.google.com by Kevin.Da...@gmail.com on 26 Oct 2007 at 7:10

GoogleCodeExporter commented 8 years ago
I think I found what is the cause for the this happening:

Look at ProjectsPane.py Line 1441

def onpopupDelete:

...
  def delete():
   ...
   rc = wx.MessageDialog(self, 

When an exception is raised by the trash function you have a message dialog 
being
created and shown. The problem is that the "delete" function is called on a 
separate
thread so when this happens it can cause a crash because of the ui not being 
thread safe.

Also a more likely candidate is directly below this in the same function where 
you
have calls to the "self.tree" "Delete" and "Collapse" since these are both ui 
calls
to the tree they are probably also not thread safe. Try to change the calls to 
this.

# If node is a project, remove it
if node in projects:
   wx.CallAfter(self.tree.Collapse, node)
   wx.CallAfter(self.tree.Delete, node)
   self.saveProjects()

I did some testing with these changes made on my local copy and could not get 
Editra
to crash. I was not able to get it to consistently crash before though so could 
you
double check this if you get a chance so that Move to Trash can be re-enabled.

Thanks,

Original comment by CodyPrec...@gmail.com on 30 Oct 2007 at 10:51

GoogleCodeExporter commented 8 years ago
I don't think that these issues are the cause.  The first one would only be an 
issue if something happened 
where you couldn't delete the requested file (i.e., not sufficient permissions, 
read-only file system, etc.).  The 
second one only happens if you try to delete a top-level project folder.  It 
probably wouldn't hurt to use the 
CallAfter in the project delete, but you'd have to do it on the saveProjects as 
well.  Otherwise, you'd save the 
projects list before the project node was deleted.  I did try playing around 
with these areas, but still got 
crashes.  Here is the top of the traceback.

{{{
0   libwx_macud-2.8.0.dylib     0x02237c87 
wxGenericTreeCtrl::GetNextChild(wxTreeItemId const&, void*&) 
const + 49
1   libwx_macud-2.8.0.dylib     0x02235367 
wxGenericTreeCtrl::GetFirstChild(wxTreeItemId const&, void*&) 
const + 53
2   _controls_.so               0x035fa2a4 _wrap_TreeCtrl_GetFirstChild + 302 
(_controls_wrap.cpp:3226)
}}}

It's crashing when trying to walk through the children of some node.  I wish I 
could get a traceback from the 
Python side to know where in my code this was happening.

Original comment by Kevin.Da...@gmail.com on 30 Oct 2007 at 2:07

GoogleCodeExporter commented 8 years ago
Got another error related to this today while working on somethings and 
deleting files from command line 
that were expanded in the Projects plugin that I thought I would note here. 
This one looks like it could 
potentially be from a bug in wx, I haven't seen an error like this before.

*** Wed Jan 23 19:34:41 2008 ***
Traceback (most recent call last):
  File %22build/bdist.macosx-10.3-fat/egg/projects/ProjectPane.py%22, line 437, in OnSyncNode
  File %22wx/_controls.pyo%22, line 5243, in GetItemText
PyAssertionError: C++ assertion %22stringSrc.GetStringData()->IsValid()%22 
failed at /BUILD/wxPython-src-
2.8.7.1/include/wx/string.h(352) in wxStringBase(): did you forget to call 
UngetWriteBuf()?

In this case an exceptions was raised but I also later got a crash when 
deleting some more files after this 
error.

Stack traceback:

Thread 0 Crashed:
0   libwx_macud-2.8.0.dylib     0x1223adb4 
wxGenericTreeCtrl::GetItemText(wxTreeItemId const&) const + 
28
1   _controls_.so               0x01608c58 wxPyControl::OnInternalIdle() + 510008
2   org.python.python           0x0040e278 PyObject_Call + 45
3   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
4   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
5   org.python.python           0x004975b1 PyEval_EvalFrameEx + 16762
6   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
7   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
8   org.python.python           0x0040e278 PyObject_Call + 45
9   org.python.python           0x00415ee5 PyMethod_New + 2432
10  org.python.python           0x0040e278 PyObject_Call + 45
11  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
12  _core_.so                   0x01053192 wxPyCallback::EventThunker(wxEvent&) + 
234
13  libwx_macud-2.8.0.dylib     0x120b0fa4 
wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase 
const&, wxEvtHandler*, wxEvent&) + 108
14  libwx_macud-2.8.0.dylib     0x120b104a 
wxEvtHandler::SearchDynamicEventTable(wxEvent&) + 80
15  libwx_macud-2.8.0.dylib     0x120b1ddf wxEvtHandler::ProcessEvent(wxEvent&) + 
225
16  libwx_macud-2.8.0.dylib     0x120b1abd wxEvtHandler::ProcessPendingEvents() + 
103
17  libwx_macud-2.8.0.dylib     0x1200c4ba wxAppConsole::ProcessPendingEvents() + 
102
18  libwx_macud-2.8.0.dylib     0x120a9461 wxMacProcessNotifierAndPendingEvents + 
33
19  libwx_macud-2.8.0.dylib     0x120d3cde wxApp::MacHandleOneEvent(void*) + 90
20  libwx_macud-2.8.0.dylib     0x120d3d6e wxApp::MacDoOneEvent() + 120
21  libwx_macud-2.8.0.dylib     0x120ed9b4 wxEventLoop::Dispatch() + 32
22  libwx_macud-2.8.0.dylib     0x121a4e93 wxEventLoopManual::Run() + 97
23  libwx_macud-2.8.0.dylib     0x1217b7ec wxAppBase::MainLoop() + 76
24  _core_.so                   0x01049e90 wxPyApp::MainLoop() + 52
25  _core_.so                   0x01094ad6 wxIntersectRect(wxRect*, wxRect*) + 
211280
26  org.python.python           0x0040e278 PyObject_Call + 45
27  org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
28  org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
29  org.python.python           0x0042f537 PyFunction_SetClosure + 2019
30  org.python.python           0x0040e278 PyObject_Call + 45
31  org.python.python           0x00415ee5 PyMethod_New + 2432
32  org.python.python           0x0040e278 PyObject_Call + 45
33  org.python.python           0x00495851 PyEval_EvalFrameEx + 9242
34  org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
35  org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
36  org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
37  org.python.python           0x00499e90 PyEval_EvalCode + 87
38  org.python.python           0x004bd100 PyRun_FileExFlags + 260
39  org.python.python           0x0048e5e7 PyAST_FromNode + 7521
40  org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
41  org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
42  org.python.python           0x004975b1 PyEval_EvalFrameEx + 16762
43  org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
44  org.python.python           0x00499e90 PyEval_EvalCode + 87
45  org.python.python           0x004bd100 PyRun_FileExFlags + 260
46  org.python.python           0x004bd49a PyRun_SimpleFileExFlags + 640
47  org.python.python           0x004bd63d PyRun_SimpleFile + 40
48  org.editra.Editra           0x000062d7 start + 16867
49  org.editra.Editra           0x00006f3d main + 2097
50  org.editra.Editra           0x00002202 start + 270
51  org.editra.Editra           0x0000211d start + 41

Thread 1:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 2:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 3:
0   libSystem.B.dylib           0x900248c7 semaphore_wait_signal_trap + 7
1   com.apple.ColorSync         0x915a86db 
pthreadSemaphoreWait(t_pthreadSemaphore*) + 35
2   com.apple.ColorSync         0x915c2dec CMMConvTask(void*) + 60
3   libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 4:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 5:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 6:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 7:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 8:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 9:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 10:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 11:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 12:
0   libSystem.B.dylib           0x9001a1cc select + 12
1   org.python.python           0x0049942a PyEval_EvalFrameEx + 24563
2   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
3   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
4   org.python.python           0x0040e278 PyObject_Call + 45
5   org.python.python           0x00496cad PyEval_EvalFrameEx + 14454
6   org.python.python           0x004994d8 PyEval_EvalFrameEx + 24737
7   org.python.python           0x00499cdc PyEval_EvalCodeEx + 1819
8   org.python.python           0x0042f537 PyFunction_SetClosure + 2019
9   org.python.python           0x0040e278 PyObject_Call + 45
10  org.python.python           0x00415ee5 PyMethod_New + 2432
11  org.python.python           0x0040e278 PyObject_Call + 45
12  org.python.python           0x004925b2 PyEval_CallObjectWithKeywords + 112
13  org.python.python           0x004ccd36 _PyObject_GC_NewVar + 1965
14  libSystem.B.dylib           0x90024227 _pthread_body + 84

Thread 0 crashed with X86 Thread State (32-bit):
  eax: 0x00000000  ebx: 0x1223ada6  ecx: 0x0035dde8  edx: 0x01a88000
  edi: 0xbfffc4d0  esi: 0x00560043  ebp: 0xbfffc478  esp: 0xbfffc440
   ss: 0x0000001f  efl: 0x00010202  eip: 0x1223adb4   cs: 0x00000017
   ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037

Original comment by CodyPrec...@gmail.com on 24 Jan 2008 at 8:03

GoogleCodeExporter commented 8 years ago
Got yet another different exception raised before a crash today when deleting a 
folder from the command 
line,

*** Fri Jan 25 08:49:30 2008 ***
Traceback (most recent call last):
  File "build/bdist.macosx-10.3-fat/egg/projects/ProjectPane.py", line 170, in OnCompareItems
  File "wx/_controls.pyo", line 5243, in GetItemText
PyAssertionError: C++ assertion "item.IsOk()" failed at /BUILD/wxPython-src-
2.8.7.1/src/generic/treectlg.cpp(935) in GetItemText(): invalid tree item

Original comment by CodyPrec...@gmail.com on 25 Jan 2008 at 2:52

GoogleCodeExporter commented 8 years ago
Was getting some more crashes today so I decided to do some more thorough 
debugging and think I may 
have fixed this issue.

In _updateStatus there where calls to the TreeCtrl for getting an item's text. 
I moved these calls into another 
method that gets executed when the EVT_UPDATE_STATUS is posted to the main 
thread.

I couldn't get any crashes after changing this on my machine, but the crashes 
were always a bit inconsistent 
to reproduce. If you could do some testing and try to confirm if this has fixed 
the issue or not that would be 
great.

cody

Original comment by CodyPrec...@gmail.com on 24 Feb 2008 at 8:57

GoogleCodeExporter commented 8 years ago
Been using this fix for quite a few months now and have not had a crash related 
to 
the move to trash action.

closing as fixed.

cody

Original comment by CodyPrec...@gmail.com on 21 Aug 2008 at 2:32

GoogleCodeExporter commented 8 years ago
Move old 'fixed' issues to verified

Original comment by CodyPrec...@gmail.com on 3 Feb 2009 at 8:18