libdraw: fix leftover processes or programs failing to restore window labels when receiving interrupt note
fix the default note handler for event programs. only handle non system notes or notes in the slave processes. for interrupt in the main process, just call exits() which will do the cleanup and restore window label properly. this makes completely overriding the note handler in gping and stats uneccesary.
This commit is contained in:
parent
df9597ecde
commit
508b53a29a
3 changed files with 21 additions and 39 deletions
|
@ -630,16 +630,6 @@ lostval(Machine *m, long *v, long *vmax, long *mark)
|
|||
*vmax = 100;
|
||||
}
|
||||
|
||||
jmp_buf catchalarm;
|
||||
|
||||
void
|
||||
alarmed(void *a, char *s)
|
||||
{
|
||||
if(strcmp(s, "alarm") == 0)
|
||||
notejmp(a, catchalarm, 1);
|
||||
noted(NDFLT);
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
|
@ -1030,7 +1020,6 @@ main(int argc, char *argv[])
|
|||
}
|
||||
colinit();
|
||||
einit(Emouse);
|
||||
notify(nil);
|
||||
startproc(mouseproc, 0);
|
||||
display->locking = 1; /* tell library we're using the display lock */
|
||||
|
||||
|
|
|
@ -710,12 +710,12 @@ initmach(Machine *m, char *name)
|
|||
|
||||
jmp_buf catchalarm;
|
||||
|
||||
void
|
||||
int
|
||||
alarmed(void *a, char *s)
|
||||
{
|
||||
if(strcmp(s, "alarm") == 0)
|
||||
notejmp(a, catchalarm, 1);
|
||||
noted(NDFLT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -781,7 +781,7 @@ readmach(Machine *m, int init)
|
|||
eresized(0);
|
||||
}
|
||||
if(m->remote){
|
||||
notify(alarmed);
|
||||
atnotify(alarmed, 1);
|
||||
alarm(5000);
|
||||
}
|
||||
if(needswap(init) && loadbuf(m, &m->swapfd) && readswap(m, a))
|
||||
|
@ -809,7 +809,7 @@ readmach(Machine *m, int init)
|
|||
m->temp[n] = a[0];
|
||||
if(m->remote){
|
||||
alarm(0);
|
||||
notify(nil);
|
||||
atnotify(alarmed, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1410,7 +1410,6 @@ main(int argc, char *argv[])
|
|||
}
|
||||
colinit();
|
||||
einit(Emouse);
|
||||
notify(nil);
|
||||
startproc(mouseproc, Mouseproc);
|
||||
pids[Mainproc] = getpid();
|
||||
display->locking = 1; /* tell library we're using the display lock */
|
||||
|
|
|
@ -346,39 +346,33 @@ eforkslave(ulong key)
|
|||
}
|
||||
|
||||
static int
|
||||
enote(void *v, char *s)
|
||||
enote(void*, char *s)
|
||||
{
|
||||
char t[1];
|
||||
int i, pid;
|
||||
|
||||
USED(v, s);
|
||||
pid = getpid();
|
||||
if(pid != parentpid){
|
||||
for(i=0; i<nslave; i++){
|
||||
if(pid == eslave[i].pid){
|
||||
t[0] = MAXSLAVE;
|
||||
write(epipe[1], t, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(strncmp(s, "sys:", 4) == 0 || strcmp(s, "alarm") == 0)
|
||||
return 0;
|
||||
}
|
||||
close(epipe[0]);
|
||||
epipe[0] = -1;
|
||||
close(epipe[1]);
|
||||
epipe[1] = -1;
|
||||
for(i=0; i<nslave; i++){
|
||||
pid = getpid();
|
||||
for(i=0; i<nslave; i++)
|
||||
if(pid == eslave[i].pid)
|
||||
continue; /* don't kill myself */
|
||||
postnote(PNPROC, eslave[i].pid, "die");
|
||||
}
|
||||
return 0;
|
||||
return 1;
|
||||
if(pid != parentpid)
|
||||
return 0;
|
||||
exits("killed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
ekill(void)
|
||||
{
|
||||
enote(0, 0);
|
||||
int i, pid;
|
||||
|
||||
pid = getpid();
|
||||
for(i=0; i<nslave; i++){
|
||||
if(pid == eslave[i].pid)
|
||||
continue; /* don't kill myself */
|
||||
postnote(PNPROC, eslave[i].pid, "die");
|
||||
}
|
||||
}
|
||||
|
||||
Mouse
|
||||
|
|
Loading…
Reference in a new issue