Developer forums (C::B DEVELOPMENT STRICTLY!) > Development
[Issue]: Cyclic loop resulting in a silent crash
MortenMacFly:
I tried to "implement" a cbMessageBox at a certain position and suddenly C::B didn't run anymore - instead it crashed silently. I realised the following issue with cbMessageBox:
- if cbMessageBox is called PlaceWindow will be called, but:
- if cbMessageBox is called with a NULL parent pointer, PlaceWindow receives the same
- PlaceWindow with thus issue a cbThrow which will raise a cbException which will use a cbMessageBox
- this again will call PlaceWindow with a NULL pointer... and so on...
You get the idea. cbMessageBox is not safe at all time (speaking about construction/destruction phase)... What to do about this?
My suggestion: Change
--- Code: --- if(!w)
cbThrow(_T("Passed NULL pointer to PlaceWindow."));
--- End code ---
...in PlaceWindow to:
--- Code: --- if(!w)
cbThrow(_T("Passed NULL pointer to PlaceWindow."), true);
--- End code ---
...which uses a wxSafeShowMessage instead of cbMessageBox... any objections?
Thomas? Yiannis? Others?
With regards, Morten.
thomas:
Sounds valid.
mandrav:
Agreed.
MortenMacFly:
--- Quote from: mandrav on November 15, 2006, 08:10:03 pm ---Agreed.
--- End quote ---
Actually it's wrong. I mean: Using cbThrow(..., true) in PlaceWindow is ok.
But using wxMessageDialog in cbMessageBox with parent==NULL does not work anyway because wxMessageDialog *requires* a parent. I fixed it the following way:
In cbMessageBox, if parent==NULL use a wxMessageBox, otherwise use wxMessageDialog.
But: This limits the return values as they differ from wxMessageDialog. How to handle this (Will commit anytime soon for your inspection...)???
With regards, Morten.
Edit: I'll handle this by mapping the return values of wxMessageBox to the ones of wxMessageDialog. Committing now...
Pecan:
--- Quote from: MortenMacFly on November 15, 2006, 08:27:03 pm ---Edit: I'll handle this by mapping the return values of wxMessageBox to the ones of wxMessageDialog. Committing now...
--- End quote ---
Yeah. The samples do message box return code translation all over the place.
So does the source code for wxMessageBox.
Navigation
[0] Message Index
[#] Next page
Go to full version