Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Nov 2004 18:01:02 +0100
From:      "Poul-Henning Kamp" <phk@phk.freebsd.dk>
To:        Giorgos Keramidas <keramida@freebsd.org>
Cc:        freebsd-current@freebsd.org
Subject:   Re: bug of misc/screen and fifos or ours? 
Message-ID:  <52048.1100797262@critter.freebsd.dk>
In-Reply-To: Your message of "Thu, 18 Nov 2004 18:52:44 %2B0200." <20041118165244.GA46388@orion.daedalusnetworks.priv> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <20041118165244.GA46388@orion.daedalusnetworks.priv>, Giorgos Kerami
das writes:
>On 2004-11-18 17:47, Poul-Henning Kamp <phk@phk.freebsd.dk> wrote:
>> In message <20041118164356.GA46185@orion.daedalusnetworks.priv>,
>> Giorgos Keramidas writes:
>>
>> >	BLOCK fcntl
>> >
>> >This is apparently the result of the following code from screen/socket.c:
>> >
>> >   793	#ifdef NAMEDPIPE
>> >   794	  debug("Ha, there was someone knocking on my fifo??\n");
>> >   795	  if (fcntl(ServerSocket, F_SETFL, 0) == -1)
>> >   796	    Panic(errno, "BLOCK fcntl");
>> >   797	#else
>> >
>> >At line 795, screen attempts to set blocking mode on a FIFO and fails.
>>
>> Can you get me the exact errno value ?
>
>Sure.  It's ENOTTY.

Ok, found it, my bug, can you try this patch:


Index: fs/fifofs/fifo_vnops.c
===================================================================
RCS file: /home/ncvs/src/sys/fs/fifofs/fifo_vnops.c,v
retrieving revision 1.105
diff -u -r1.105 fifo_vnops.c
--- fs/fifofs/fifo_vnops.c	17 Nov 2004 07:30:02 -0000	1.105
+++ fs/fifofs/fifo_vnops.c	18 Nov 2004 16:59:25 -0000
@@ -566,8 +566,27 @@
 static int
 fifo_ioctl_f(struct file *fp, u_long com, void *data, struct ucred *cred, struct thread *td)
 {
+	struct fifoinfo *fi;
+	struct file filetmp;	/* Local, so need not be locked. */
+	int error;
 
-	return (vnops.fo_ioctl(fp, com, data, cred, td));
+	error = ENOTTY;
+	fi = fp->f_data;
+	if (com == FIONBIO)
+		return (0);
+	if (fp->f_flag & FREAD) {
+		filetmp.f_data = fi->fi_readsock;
+		filetmp.f_cred = cred;
+		error = soo_ioctl(&filetmp, com, data, cred, td);
+		if (error)
+			return (error);
+	}
+	if (fp->f_flag & FWRITE) {
+		filetmp.f_data = fi->fi_writesock;
+		filetmp.f_cred = cred;
+		error = soo_ioctl(&filetmp, com, data, cred, td);
+	}
+	return (error);
 }
 
 static int

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?52048.1100797262>