NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/46522
The following reply was made to PR kern/46522; it has been noted by GNATS.
From: Nat Sloss <nathanialsloss%yahoo.com.au@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc:
Subject: Re: kern/46522
Date: Tue, 5 Jun 2012 02:37:59 +1000
Hi Sorry for the previous posting. I was using yahoo web mail and the resu=
lts=20
were unexpected. All is well again my email is working as it should.
Regards,
Nat.
=2D--------- Forwarded Message ----------
Subject: Re: kern/46522
Date: Tue, 5 Jun 2012
=46rom: Nathanial Sloss <nathanialsloss%yahoo.com.au@localhost>
To: "gnats-bugs%netbsd.org@localhost" <gnats-bugs%netbsd.org@localhost>
Hi,
The getty doesn't have to be killed it's dying it's just that before it is=
=20
finished the cvs' are being destroyed.
So I came up with another patch,=A0 If t_pgrp isn't nullified in ttyclose i=
t=20
would be possible to wait on processes in the list until they die and then=
=20
safely free the screen.=A0 So what I did was this:
Index: sys/kern/tty.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/src/sys/kern/tty.c,v
retrieving revision 1.250
diff -u -r1.250 tty.c
=2D-- sys/kern/tty.c=A0=A0=A0=A0=A0 12 Mar 2012 18:27:08 -0000=A0=A0=A0=A0=
=A0 1.250
+++ sys/kern/tty.c=A0=A0=A0=A0=A0 4 Jun 2012 15:46:59 -0000
@@ -422,7 +422,6 @@
=A0=A0=A0=A0=A0=A0=A0 ttyflush(tp, FREAD | FWRITE);
=A0=A0=A0=A0=A0=A0=A0 tp->t_gen++;
=2D=A0=A0=A0=A0=A0=A0 tp->t_pgrp =3D NULL;
=A0=A0=A0=A0=A0=A0=A0 tp->t_state =3D 0;
=A0=A0=A0=A0=A0=A0=A0 sess =3D tp->t_session;
=A0=A0=A0=A0=A0=A0=A0 tp->t_session =3D NULL;
@@ -2762,7 +2761,12 @@
=A0void
=A0tty_free(struct tty *tp)
=A0{
=2D=A0=A0=A0=A0=A0=A0 int i;
+=A0=A0=A0=A0=A0=A0 int i, timeout;
+=A0=A0=A0=A0=A0=A0 struct proc *p;
+
+=A0=A0=A0=A0=A0=A0 timeout =3D mstohz(200);
+=A0=A0=A0=A0=A0=A0 if (timeout =3D=3D 0)
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 timeout =3D 1;
=A0=A0=A0=A0=A0=A0=A0 mutex_enter(proc_lock);
=A0=A0=A0=A0=A0=A0=A0 mutex_enter(&tty_lock);
@@ -2770,9 +2774,17 @@
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 sigemptyset(&tp->t_sigs[i]);
=A0=A0=A0=A0=A0=A0=A0 if (tp->t_sigcount !=3D 0)
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 TAILQ_REMOVE(&tty_sigqueue, t=
p, t_sigqueue);
=2D=A0=A0=A0=A0=A0=A0 mutex_exit(&tty_lock);
=A0=A0=A0=A0=A0=A0=A0 mutex_exit(proc_lock);
+=A0=A0=A0=A0=A0=A0 while (tp->t_pgrp !=3D NULL) {
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if ((p =3D LIST_FIRST(&tp->t_pg=
rp->pg_members)) !=3D NULL)
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ttyslee=
p(tp, &tp->t_rawcv, true, timeout);
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else if (LIST_EMPTY(&tp->t_pgrp=
=2D>pg_members))
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 tp->t_p=
grp =3D NULL;
+=A0=A0=A0=A0=A0=A0 }
+=A0=A0=A0=A0=A0=A0 tp->t_pgrp =3D NULL;
+=A0=A0=A0=A0=A0=A0 mutex_exit(&tty_lock);
+
=A0=A0=A0=A0=A0=A0=A0 callout_halt(&tp->t_rstrt_ch, NULL);
=A0=A0=A0=A0=A0=A0=A0 callout_destroy(&tp->t_rstrt_ch);
=A0=A0=A0=A0=A0=A0=A0 ttyldisc_release(tp->t_linesw);
Note: This patch is my own work which I submit under the NetBSD license.
I hope this is a better patch.
Regards,
Nat.
=2D------------------------------------------------------
Home |
Main Index |
Thread Index |
Old Index