Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Jun 2000 14:59:14 +0200
From:      Markus Holmberg <markush@acc.umu.se>
To:        freebsd-java@freebsd.org
Cc:        Marcel Moolenaar <marcel@cup.hp.com>, John Rochester <john.rochester@enetgroup.co.uk>
Subject:   [markush@acc.umu.se: i386/18940: Reading from stdin using linux-jdk1.2.2 under Linux emulation fails]
Message-ID:  <20000601145914.A24627@acc.umu.se>

next in thread | raw e-mail | index | archive | help
Just to notify people who experienced the problems with reading from
stdin using linux-jdk-1.2.2:

I have now sent a PR regarding this, just to get it on record.

http://www.freebsd.org/cgi/query-pr.cgi?pr=18940

Regards, Markus.


----- Forwarded message from markush@acc.umu.se -----

From: markush@acc.umu.se
To: FreeBSD-gnats-submit@FreeBSD.ORG
Date: Thu,  1 Jun 2000 14:46:03 +0200 (CEST)
Subject: i386/18940: Reading from stdin using linux-jdk1.2.2 under Linux emulation fails


>Number:         18940
>Category:       i386
>Synopsis:       Reading from stdin using linux-jdk-1.2.2 under Linux emulation fails
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jun 01 05:50:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Markus Holmberg
>Release:        FreeBSD 4.0-STABLE i386
>Organization:
n/a
>Environment:

	FreeBSD 4.0-STABLE (also tested on 3.4-STABLE)
	linux-jdk-1.2.2 (port is submitted as pr, but not processed)

>Description:

Several people on the freebsd-java mailing list have reported problems with
reading from standard input in linux-jdk-1.2.2. The problem is that input does
not seem to be "sent" to the java process running under Linux emulation, which
means that the Java program blocks in the i/o read operation (even though there
is input to be read).

>How-To-Repeat:

Using the Java-snippet below, a dot character should be printed on a line for itself
for each character that has been read in from stdin. This will not happen on a broken
system (a few dots might be output, but after that it's blocked).

(Read.java)
-8<------------------------------------------
import java.io.*;

public class Read {
    public static void main(String[] args) {
        try {
            while (System.in.read() != -1) {
                System.out.println(".");
            }
        } catch (IOException e) {
            System.err.println(e);
        }
    }
}
-8<------------------------------------------

>Fix:

There was a patch (for 3.x) posted to the freebsd-java mailing list some months
ago, but it is unclear why the patch works and if it causes any undesired side
effects (since it removes a lot of code). 

Marcel Moolenaar (Linux emulation maintainer) has seen the patch but is not sure
if it's safe to remove the code that the patch wants to remove.

John Rochesters original patch for 3.x (only the patch for linux_file.c is relevant
in the posting):
http://docs.freebsd.org/cgi/getmsg.cgi?fetch=22905+0+archive/2000/freebsd-java/20000220.freebsd-java

Here's the same patch adapted for 4.0-STABLE (May 29th):

--- linux_file.c.orig	Mon May 29 13:21:09 2000
+++ linux_file.c	Mon May 29 13:26:05 2000
@@ -199,12 +199,6 @@
     } */ fcntl_args; 
     struct linux_flock linux_flock;
     struct flock *bsd_flock;
-    struct filedesc *fdp;
-    struct file *fp;
-    struct vnode *vp;
-    long pgid;
-    struct pgrp *pgrp;
-    struct tty *tp;
     caddr_t sg;
     dev_t dev;
 
@@ -289,47 +283,9 @@
 
     case LINUX_F_SETOWN:
     case LINUX_F_GETOWN:
-	/*
-	 * We need to route around the normal fcntl() for these calls,
-	 * since it uses TIOC{G,S}PGRP, which is too restrictive for
-	 * Linux F_{G,S}ETOWN semantics. For sockets, this problem
-	 * does not exist.
-	 */
-	fdp = p->p_fd;
-	if ((u_int)args->fd >= fdp->fd_nfiles ||
-		(fp = fdp->fd_ofiles[args->fd]) == NULL)
-	    return EBADF;
-	if (fp->f_type == DTYPE_SOCKET) {
-	    fcntl_args.cmd = args->cmd == LINUX_F_SETOWN ? F_SETOWN : F_GETOWN;
-    	    fcntl_args.arg = args->arg;
-	    return fcntl(p, &fcntl_args); 
-	}
-	vp = (struct vnode *)fp->f_data;
-	dev = vn_todev(vp);
-	if (dev == NODEV)
-	    return EINVAL;
-	if (!(devsw(dev)->d_flags & D_TTY))
-	    return EINVAL;
-	tp = dev->si_tty;
-	if (!tp)
-	    return EINVAL;
-	if (args->cmd == LINUX_F_GETOWN) {
-	    p->p_retval[0] = tp->t_pgrp ? tp->t_pgrp->pg_id : NO_PID;
-	    return 0;
-	}
-	if ((long)args->arg <= 0) {
-	    pgid = -(long)args->arg;
-	} else {
-	    struct proc *p1 = pfind((long)args->arg);
-	    if (p1 == 0)
-		return (ESRCH);
-	    pgid = (long)p1->p_pgrp->pg_id;
-	}
-	pgrp = pgfind(pgid);
-	if (pgrp == NULL || pgrp->pg_session != p->p_session)
-	    return EPERM;
-	tp->t_pgrp = pgrp;
-	return 0;
+       fcntl_args.cmd = args->cmd == LINUX_F_SETOWN ? F_SETOWN : F_GETOWN;
+       fcntl_args.arg = args->arg;
+       return fcntl(p, &fcntl_args); 
     }
     return EINVAL;
 }

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message

----- End forwarded message -----

-- 

Markus Holmberg         |       Give me Unix or give me a typewriter.
markush@acc.umu.se      |       http://www.freebsd.org/


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-java" in the body of the message




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