AmendHub

jcs

/

subtext

/

amendments

/

122

util: vwarn can't re-use its alert DITL handle, make a new one

But still pre-allocate one at startup

jcs made amendment 122 5 months ago
--- util.c Wed Jun 1 13:11:54 2022 +++ util.c Tue Jun 7 14:04:37 2022 @@ -275,7 +275,7 @@ vwarn(short alert_func, const char *format, va_list ap bounds.top = GetMBarHeight() + ((screenBits.bounds.bottom - height) / 2.5); bounds.bottom = bounds.top + height; - + ParamText(CtoPstr(err_str), "\p", "\p", "\p"); dialog = NewDialog(nil, &bounds, "\p", false, dBoxProc, @@ -306,6 +306,19 @@ vwarn(short alert_func, const char *format, va_list ap } DisposDialog(dialog); + /* + * Pre-allocate for the next one while we have memory. We can't use + * xNewHandle because we might already be alerting about an OOM + * condition. + */ + DisposHandle(alert_ditl_h); + alert_ditl_h = NewHandle(sizeof(alert_ditl)); + if (alert_ditl_h == NULL) + ExitToShell(); + HLock(alert_ditl_h); + memcpy(*alert_ditl_h, alert_ditl, sizeof(alert_ditl)); + HUnlock(alert_ditl_h); + SetPort(win); if (quit) @@ -405,7 +418,7 @@ ask(const char *format, ...) break; } DisposDialog(dialog); - DisposHandle(alert_ditl_h); + DisposHandle(ask_ditl); SetPort(win);