bug of misc/screen and fifos or ours?
Poul-Henning Kamp
phk at phk.freebsd.dk
Thu Nov 18 09:01:04 PST 2004
In message <20041118165244.GA46388 at orion.daedalusnetworks.priv>, Giorgos Kerami
das writes:
>On 2004-11-18 17:47, Poul-Henning Kamp <phk at phk.freebsd.dk> wrote:
>> In message <20041118164356.GA46185 at 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 at 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.
More information about the freebsd-current
mailing list