app_server: Catch drawing (AGG) allocation exceptions.
Since _DispatchViewDrawingMessage sends single B_ERROR replies in a number of generic cases, doing so here is probably fine; it's much better than crashing, anyway. This is the generalized case of PulkoMandy's earlier patch, which only applied to one drawing operation. This now affects all AGG calls. Change-Id: I751439e43cc300b964ac4cf41c48c1df30baf0a3 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1863 Reviewed-by: Stephan Aßmus <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
174a50869d
commit
d46af3075e
@@ -2451,7 +2451,21 @@ fDesktop->LockSingleWindow();
|
|||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
// The drawing code handles allocation failures using exceptions;
|
||||||
|
// so we need to account for that here.
|
||||||
|
try {
|
||||||
_DispatchViewDrawingMessage(code, link);
|
_DispatchViewDrawingMessage(code, link);
|
||||||
|
} catch (std::bad_alloc&) {
|
||||||
|
// Cancel any message we were in the middle of sending.
|
||||||
|
fLink.CancelMessage();
|
||||||
|
|
||||||
|
if (link.NeedsReply()) {
|
||||||
|
// As done in _DispatchViewDrawingMessage, send just a
|
||||||
|
// single status_t as the reply.
|
||||||
|
fLink.StartMessage(B_NO_MEMORY);
|
||||||
|
fLink.Flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user