[ 
https://issues.apache.org/jira/browse/CLEREZZA-462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13009816#comment-13009816
 ] 

Reto Bachmann-Gmür commented on CLEREZZA-462:
---------------------------------------------

I think the solution to this one would be to have a low-startlevel service that 
is usually never restarted and that provide virtual system inputstreams that 
can be terminated by a method call. When such a stream is terminated any thread 
currently in ablocking read gets a -1, the service however continues and does 
not interrupt its own call to read() of the real standard input and will return 
the read char to the next read call of the next created virtual inputstream. 
I've looked at felix.shell.tui but they don't seem to have a solution either, 
after stopping the bundle the thread will terminate once the current line has 
been read.

> java.io.IOException: Bad file descriptor
> ----------------------------------------
>
>                 Key: CLEREZZA-462
>                 URL: https://issues.apache.org/jira/browse/CLEREZZA-462
>             Project: Clerezza
>          Issue Type: Bug
>            Reporter: Reto Bachmann-Gmür
>            Assignee: Reto Bachmann-Gmür
>
> Occasionally the following exception occurs when updating a bundle and the 
> shell crashes. The shell should resume gracefully.
> org.apache.clerezza.shell.InterruptibleInputStream$$anon$1@1578d4a: caught 
> java.io.IOException: Bad file descriptor
> java.io.IOException: Bad file descriptor
>       at sun.nio.ch.FileDispatcher.read0(Native Method)
>       at sun.nio.ch.FileDispatcher.read(FileDispatcher.java:26)
>       at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:202)
>       at sun.nio.ch.IOUtil.read(IOUtil.java:175)
>       at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:144)
>       at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:48)
>       at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:92)
>       at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:86)
>       at java.io.InputStream.read(InputStream.java:85)
>       at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:64)
>       at 
> org.apache.clerezza.shell.InterruptibleInputStream$$anon$1$$anonfun$act$1$$anonfun$apply$1.apply(InterruptibleInputStream.scala:40)
>       at 
> org.apache.clerezza.shell.InterruptibleInputStream$$anon$1$$anonfun$act$1$$anonfun$apply$1.apply(InterruptibleInputStream.scala:35)
>       at scala.actors.ReactorTask.run(ReactorTask.scala:34)
>       at scala.actors.Reactor$class.resumeReceiver(Reactor.scala:129)
>       at 
> org.apache.clerezza.shell.InterruptibleInputStream$$anon$1.scala$actors$ReplyReactor$$super$resumeReceiver(InterruptibleInputStream.scala:32)
>       at scala.actors.ReplyReactor$class.resumeReceiver(ReplyReactor.scala:69)
>       at 
> org.apache.clerezza.shell.InterruptibleInputStream$$anon$1.resumeReceiver(InterruptibleInputStream.scala:32)
>       at scala.actors.Actor$class.searchMailbox(Actor.scala:478)
>       at 
> org.apache.clerezza.shell.InterruptibleInputStream$$anon$1.searchMailbox(InterruptibleInputStream.scala:32)
>       at 
> scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply(Reactor.scala:114)
>       at 
> scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply(Reactor.scala:114)
>       at scala.actors.ReactorTask.run(ReactorTask.scala:36)
>       at 
> scala.concurrent.forkjoin.ForkJoinPool$AdaptedRunnable.exec(ForkJoinPool.java:611)
>       at 
> scala.concurrent.forkjoin.ForkJoinTask.quietlyExec(ForkJoinTask.java:422)
>       at 
> scala.concurrent.forkjoin.ForkJoinWorkerThread.mainLoop(ForkJoinWorkerThread.java:340)
>       at 
> scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:325)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to