lmi
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lmi] wxmsw-2.9.0 regression: messagebox doubling


From: Vadim Zeitlin
Subject: Re: [lmi] wxmsw-2.9.0 regression: messagebox doubling
Date: Tue, 24 Feb 2009 20:33:22 +0100

On Tue, 24 Feb 2009 15:25:22 +0000 Greg Chicares <address@hidden> wrote:

GC> Run lmi with the argument that we never write in public, in order
GC> to enable the "Test" menu. Then:
GC> 
GC>   alt-F N I Enter alt-T A F
GC> 
GC> or, if you please,
GC> 
GC>   File | New | Illustration
GC>   OK

 Unfortunately I can't follow the instructions any further because after
this step I get 

---------------------------
Error
---------------------------
Table 57 in file './qx_cso': offset -1 is invalid.
[file .\actuarial_table.cpp, line 275]

---------------------------
OK   
---------------------------

infinitely many (well, maybe not, but I stopped counting and killed it
after a dozen or so) times.

 Would you already know by chance what is this about? I didn't [try to]
debug it yet, all I can see is the stack trace which is

>       lmi_wx.exe!actuarial_table::find_table()  Line 276 + 0x199      
        lmi_wx.exe!actuarial_table::actuarial_table()  Line 110 
        lmi_wx.exe!actuarial_table_rates()  Line 569 + 0x12     
        lmi_wx.exe!BasicValues::GetActuarialTable(const 
std::basic_string<char,std::char_traits<char>,std::allocator<char> > & 
TableFile={...}, long TableID=0x00000024, long TableNumber=0x00000039)  Line 
1594 + 0x23 C++
        lmi_wx.exe!BasicValues::GetUnblendedTable(const 
std::basic_string<char,std::char_traits<char>,std::allocator<char> > & 
TableFile={...}, long TableID=0x00000024)  Line 1608 + 0x33      C++
        lmi_wx.exe!BasicValues::GetTable(const 
std::basic_string<char,std::char_traits<char>,std::allocator<char> > & 
TableFile={...}, const long & TableID=0x00000024, bool IsTableValid=true, const 
EBlend & CanBlendSmoking=CannotBlend, const EBlend & 
CanBlendGender=CannotBlend)  Line 1743 + 0x16        C++
        lmi_wx.exe!BasicValues::GetGuarCOIRates()  Line 2001 + 0x45     C++
        lmi_wx.exe!MortalityRates::fetch_parameters(const BasicValues & 
basic_values={...})  Line 87 + 0xc      C++
        lmi_wx.exe!MortalityRates::MortalityRates(const BasicValues & 
basic_values={...})  Line 45      C++
        lmi_wx.exe!BasicValues::Init()  Line 261 + 0x32 C++
        lmi_wx.exe!BasicValues::BasicValues(const Input & input={...})  Line 98 
C++
        lmi_wx.exe!AccountValue::AccountValue(const Input & input={...})  Line 
113 + 0xb7       C++
        lmi_wx.exe!IllusVal::run()  Line 52 + 0x11      
        lmi_wx.exe!illustrator::operator()()  Line 125 + 0xc    
        lmi_wx.exe!IllustrationView::Run(Input * overriding_input=0x00000000)  
Line 302 + 0x84  C++
        lmi_wx.exe!IllustrationView::OnCreate(wxDocument * doc=0x01e987c8, long 
flags=0x00000001)  Line 211     C++
        lmi_wx.exe!wxDocTemplate::CreateView(wxDocument * doc=0x01e987c8, long 
flags=0x00000001)  Line 845 + 0x20       C++
        lmi_wx.exe!wxDocument::OnCreate(const wxString & __formal={...}, long 
flags=0x00000001)  Line 583 + 0x2f        C++
        lmi_wx.exe!IllustrationDocument::OnCreate(const wxString & 
filename={...}, long flags=0x00000001)  Line 116     C++
        lmi_wx.exe!wxDocTemplate::InitDocument(wxDocument * doc=0x01e987c8, 
const wxString & path={...}, long flags=0x00000001)  Line 830 + 0x15        C++
        lmi_wx.exe!wxDocTemplate::CreateDocument(const wxString & path={...}, 
long flags=0x00000001)  Line 819 + 0x1f   C++
        lmi_wx.exe!wxDocManager::CreateDocument(const wxString & 
pathOrig={...}, long flags=0x00000001)  Line 1340 + 0x15       C++
        lmi_wx.exe!wxDocManager::CreateNewDocument()  Line 396 + 0x5c   C++
        lmi_wx.exe!wxDocManager::OnFileNew(wxCommandEvent & __formal={...})  
Line 1041  C++
        ...
        lmi_wx.exe!wxEventLoopManual::Run()  Line 238 + 0xd     C++
        lmi_wx.exe!wxAppConsoleBase::MainLoop()  Line 285 + 0x25        C++
        lmi_wx.exe!wxAppConsoleBase::OnRun()  Line 226 + 0x10   C++
        lmi_wx.exe!wxAppBase::OnRun()  Line 298 C++
        lmi_wx.exe!wxEntryReal(int & argc=0x00000002, unsigned short * * 
argv=0x01b42530)  Line 495 + 0x1b      C++
        lmi_wx.exe!wxEntry(int & argc=0x00000002, unsigned short * * 
argv=0x01b42530)  Line 210 + 0xd   C++
        lmi_wx.exe!wxEntry(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * 
__formal=0x00000000, HINSTANCE__ * __formal=0x00000000, int 
nCmdShow=0x00000001)  Line 411 + 0x10  C++
        lmi_wx.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * 
hPrevInstance=0x00000000, char * lpCmdLine=0x001520d0, int nCmdShow=0x00000001) 
 Line 211 + 0x15   C++
        lmi_wx.exe!WinMainCRTStartup()  Line 390 + 0x39 C
        address@hidden()  + 0x23        

for the first error and then it crashes in wx code called from inside
safe_message_alert() because wxDocMDIChildFrame::m_childView is a dangling
pointer.

 There are obviously many bugs in (inter)play here, I see at least:

0. initial error is probably a bug, although whether it's in lmi_wx or
   in product_files which I used to generate the files is unclear
1. safe_message_alert() doesn't seem to be safe
2. m_childView shouldn't be left dangling

I'm going to fix (2) and I might look at (1) if you wish but I'd welcome
any help with (0) especially because it would allow me to test the bug
which you had originally reported -- something that I'm just unable to do
right now.

 Thanks in advance,
VZ

reply via email to

[Prev in Thread] Current Thread [Next in Thread]