Re[2]: [M-Dev] infinit recursive call to FillThreadTables() on [cancel]
Status: Beta
Brought to you by:
vadz
From: Volker A. <vol...@ya...> - 2001-11-21 19:11:49
|
On Wed, 21 Nov 2001 18:03:42 +0100 (CET) Vadim Zeitlin <Vad...@dp...> wrote: > On Wed, 21 Nov 2001 12:25:15 +0100 (CET) Volker Apelt > <vol...@ya...> wrote: > > VA> Find a huge folder (mine has >6300 articles). > VA> click once on it. A progress dialog is shown. > > The one about "retrieving headers" or the one about "threading"? About retrieving > VA> click on [cancel] while M is still reading the folder. > VA> > VA> crash and core. > > Weird, why does it dump core? Is it really the stack overflow? Ah, good guess Vadim, it is: "Program terminated with signal 11, Segmentation fault." I have prepared a 'fresh' core. So, tell me what printout you need, if you have questions on it. > FillThreadTables() is a recursive function (I think it could be rewritten > more efficiently as a non recursive one using a stack of thread nodes but > I am not going to do it) although it's probably not normal that it is that > much recursive - I haven't ever seen threads of such (5000) depth... > Xavier, any idea about this one? The threading is not really 5000 Messages deep, it should't nee more than usual (maimum 10 ... 20) ## mail/HeaderInfoImpl.cpp:1279 1277 if (node->branch != 0) 1278 nbChildren += FillThreadTables(node->branch, thrData, threadedIndex, 1279 indent, indentIfDummyNode); Is node->banch guaranteed to be initialized, if [cancel] is pressed ? How is [cancel] supposed to terminate threading? All calls start in this line. This time the Number of stac frames goes from start at 5049. (gdb) up 5049 #5049 0x81408cb in FillThreadTables (node=0x875fb78, thrData=0x84c51f8, threadedIndex=@0xbfffea38, indent=0, indentIfDummyNode=false) at mail/HeaderInfoImpl.cpp:1279 1279 indent, indentIfDummyNode); (gdb) print node $1 = (thread_node *) 0x875fb78 (gdb) print *node $2 = {num = 212, sc = 0x875fbe8, branch = 0x8768f20, next = 0x0} (gdb) up #5050 0x81409bf in HeaderInfoListImpl::CombineSortAndThread (this=0x85de788) at mail/HeaderInfoImpl.cpp:1311 1311 0, m_thrParams.indentIfDummyNode); (gdb) print *this $3 = (HeaderInfoListImpl) {<HeaderInfoList> = {<MObjectRC> = {<MObject> = {m_magic = 1234567890, _vptr. = 0x8342e80}, m_nRef = 2}, <No data fields>}, m_mf = 0x85bbf48, m_headers = {<wxBaseArray> = {m_nSize = 6357, m_nCount = 6357, m_pItems = 0x863da20, _vptr. = 0x8342f00}, <No data fields>}, m_count = 6357, m_tableSort = 0x8643d78, m_reverseOrder = false, m_reversedTables = true, m_thrData = 0x84c51f8, m_tableMsgno = 0x0, m_tablePos = 0x0, m_sortParams = {sortOrder = 5, detectOwnAddresses = true, ownAddresses = {m_nSize = 16, m_nCount = 3, m_pItems = 0x861fdd8, m_autoSort = false}}, m_thrParams = { useThreading = true, useServer = false, useServerByRefOnly = false, simplifyingRegex = { m_pchData = 0x85effc4 "^ *(R[Ee](\\[[0-9]+\\])?: +)*(\\[[^][]+\\] +)?(R[Ee](\\[[0-9]+\\])?: +)*"}, replacementString = { m_pchData = 0x84b3684 "\\3"}, gatherSubjects = true, breakThread = true, indentIfDummyNode = false}, m_dontFreeMsgnos = false, m_firstSort = true, m_lastMod = 3} Bye Volker -- Volker Apelt volker_apelt .@. yahoo.de (remove the dots, please) Dipl. Chem. +49 6172 31126 |