ref: f88b27b503b2614a2d4f6c58b1b7c35e536bee5b
parent: 65d71cecde9091b4c926dd5711d3bf46fcba37fd
author: Konstantinn Bonnet <[email protected]>
date: Sun Mar 15 09:41:19 EDT 2015
fix Rendez lockups on crash kill all threads started in IN_Init and SDDMA_Init when an "sys: " note is received.
--- a/plan9/in_9.c
+++ b/plan9/in_9.c
@@ -300,13 +300,6 @@
mouseon = false;
}
-void sucks (void *, char *note)
-{
- if(!strncmp(note, "sys:", 4))
- IN_Shutdown();
- noted(NDFLT);
-}
-
void IN_Init (void)
{
in_mouse = ri.Cvar_Get("in_mouse", "1", CVAR_ARCHIVE);
@@ -325,7 +318,6 @@
ri.Cmd_AddCommand("-mlook", IN_MLookUp);
ri.Cmd_AddCommand("force_centerview", IN_ForceCenterView);
- notify(sucks);
kchan = chancreate(sizeof(Kev), Nbuf);
if((ktid = proccreate(kproc, nil, 8192)) < 0)
sysfatal("proccreate kproc: %r");
--- a/plan9/sys_9.c
+++ b/plan9/sys_9.c
@@ -102,11 +102,21 @@
{
}
+void croak (void *, char *note)
+{
+ if(!strncmp(note, "sys:", 4)){
+ IN_Shutdown();
+ SNDDMA_Shutdown();
+ }
+ noted(NDFLT);
+}
+
void threadmain (int argc, char *argv[])
{
int time, oldtime, newtime;
setfcr(getfcr() & ~(FPOVFL|FPUNFL|FPINVAL|FPZDIV)); /* assumed ignored in code */
+ notify(croak);
Qcommon_Init(argc, argv);