AmendHub

Download:

cyberslak

/

lightsout

/

amendments

/

25

Properly check for Thread Manager before using it


cyberslak made amendment 25 2 days ago
--- main.c Tue Mar 18 00:41:09 2025 +++ main.c Thu Apr 3 21:16:18 2025 @@ -129,6 +129,7 @@ int main() { toolbox_init(); memory_init(); + net_init(); resolve_slider_cdef(); --- net.c Sun Mar 16 21:12:04 2025 +++ net.c Thu Apr 3 21:18:31 2025 @@ -102,6 +102,8 @@ short net_wait_readable(EndpointRef ep) warn("unhandled OTLook result: %x (%d)", res, res); break; } + + if (have_thread_manager()) YieldToAnyThread(); } } --- util.c Sat Mar 15 17:22:40 2025 +++ util.c Mon Apr 21 19:57:31 2025 @@ -9,6 +9,23 @@ #define kMessageAlert 128 +bool have_thread_manager() +{ + OSErr err; + static long resp = -1; // cache response + + if (resp == -1) { + err = Gestalt(gestaltThreadMgrAttr, &resp); + if (err < 0) { + if (err != gestaltUndefSelectorErr) + warn("Gestalt failed: %d", err); + resp = 0; + } + } + + return (resp & (1 << gestaltThreadMgrPresent)); +} + void win_center(WindowPtr win) { short barHeight = GetMBarHeight() * 2; // menu + title bar --- util.h Sat Mar 15 17:11:59 2025 +++ util.h Thu Apr 3 21:20:07 2025 @@ -79,4 +79,6 @@ short lo_vsnprintf(char* s, size_t size, void toolbox_init(void); void memory_init(void); +bool have_thread_manager(); + #endif // _LO_UTIL_H_