Tracker: Set message in ModelMenuItem after the try/catch block.
Otherwise the ownership isn't clear: if the exception is thrown after the item partially initializes, the message might get deleted by a destructor already. This way, the ownership is clear.
This commit is contained in:
@@ -259,17 +259,17 @@ AddOneAddOn(const Model* model, const char* name, uint32 shortcut,
|
|||||||
{
|
{
|
||||||
AddOneAddOnParams* params = (AddOneAddOnParams*)context;
|
AddOneAddOnParams* params = (AddOneAddOnParams*)context;
|
||||||
|
|
||||||
BMessage* message = new BMessage(kLoadAddOn);
|
|
||||||
message->AddRef("refs", model->EntryRef());
|
|
||||||
|
|
||||||
ModelMenuItem* item;
|
ModelMenuItem* item;
|
||||||
try {
|
try {
|
||||||
item = new ModelMenuItem(model, name, message, (char)shortcut, modifiers);
|
item = new ModelMenuItem(model, name, NULL, (char)shortcut, modifiers);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
delete message;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BMessage* message = new BMessage(kLoadAddOn);
|
||||||
|
message->AddRef("refs", model->EntryRef());
|
||||||
|
item->SetMessage(message);
|
||||||
|
|
||||||
const entry_ref* addOnRef = model->EntryRef();
|
const entry_ref* addOnRef = model->EntryRef();
|
||||||
AddOnMenuGenerate(addOnRef, menu, window);
|
AddOnMenuGenerate(addOnRef, menu, window);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user