Developer forums (C::B DEVELOPMENT STRICTLY!) > Development

[Issue]: Cyclic loop resulting in a silent crash

(1/2) > >>

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