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_