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:
cinap_lenrek 2013-08-13 21:46:13 +02:00
parent df9597ecde
commit 508b53a29a
3 changed files with 21 additions and 39 deletions

View file

@ -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 */

View file

@ -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 */

View file

@ -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