Date: Tue, 25 Feb 2003 20:56:25 +0100 From: =?ISO-8859-1?Q?David_Vidal_Rodr=EDguez?= <vidalrod@web.de> To: Alexander Leidinger <Alexander@Leidinger.net> Cc: CURRENT <freebsd-current@FreeBSD.ORG> Subject: Re: [Fwd: mkisofs | burncd not working in 5.0 ?] Message-ID: <3E5BCA69.8050804@web.de> In-Reply-To: <20030225140138.402ba14d.Alexander@Leidinger.net> References: <3E5ACB6F.4010404@web.de> <20030225140138.402ba14d.Alexander@Leidinger.net>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --]
Alexander Leidinger wrote:
> Please try the patch in from the mail to -current with the Message-ID
> <20030210033714.O1731-100000@gamplex.bde.org> and report if it works for
> you.
I've applied the patch included here, but it leads to an error (the .rej
file shows it). I infer from the reject that a "while" has to be
replaced by an "if", and so I've edited it by hand.
The problem is that my system still shows the same behavior as before :(
Maybe I've applied the wrong patch?
CU,
David.
[-- Attachment #2 --]
diff -u -2 -r1.81 fifo_vnops.c
--- fifo_vnops.c 13 Jan 2003 00:28:57 -0000 1.81
+++ fifo_vnops.c 9 Feb 2003 17:32:16 -0000
@@ -227,5 +227,5 @@
}
if ((ap->a_mode & FREAD) && (ap->a_mode & O_NONBLOCK) == 0) {
- while (fip->fi_writers == 0) {
+ if (fip->fi_writers == 0) {
VOP_UNLOCK(vp, 0, td);
error = tsleep((caddr_t)&fip->fi_readers,
@@ -234,4 +234,9 @@
if (error)
goto bad;
+ /*
+ * We must have got woken up because we had a writer.
+ * That (and not still having one) is the condition
+ * that we must wait for.
+ */
}
}
@@ -243,16 +248,16 @@
}
} else {
- while (fip->fi_readers == 0) {
+ if (fip->fi_readers == 0) {
VOP_UNLOCK(vp, 0, td);
- /*
- * XXX: Some race I havn't located is solved
- * by timing out after a sec. Race seen when
- * sendmail hangs here during boot /phk
- */
error = tsleep((caddr_t)&fip->fi_writers,
- PCATCH | PSOCK, "fifoow", hz);
+ PCATCH | PSOCK, "fifoow", 0);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
if (error)
goto bad;
+ /*
+ * We must have got woken up because we had
+ * a reader. That (and not still having one)
+ * is the condition that we must wait for.
+ */
}
}
[-- Attachment #3 --]
***************
*** 227,231 ****
}
if ((ap->a_mode & FREAD) && (ap->a_mode & O_NONBLOCK) == 0) {
- while (fip->fi_writers == 0) {
VOP_UNLOCK(vp, 0, td);
error = tsleep((caddr_t)&fip->fi_readers,
--- 227,231 ----
}
if ((ap->a_mode & FREAD) && (ap->a_mode & O_NONBLOCK) == 0) {
+ if (fip->fi_writers == 0) {
VOP_UNLOCK(vp, 0, td);
error = tsleep((caddr_t)&fip->fi_readers,
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E5BCA69.8050804>
