That doesn't appear to be the problem. The spit function creates a Writer
around the input stream and then closes it, which should get the underlying
InputStream closed and flushed.

Just to make sure, I tried this in place of spit:
    (.write client-in (int \newline))
    (.flush client-in)
And added a logging call inside the loop in read-line-stream to see if any
character made it through, but the deadlock still happens at the same spot,
and not even one character makes it through.


2014-04-20 0:43 GMT-07:00 Guillaume Nodet <[email protected]>:

> The getInvertedIn() output stream is buffered.  If you want to
> actually send a small amount of data, you need to call flush() after
> writing to the stream.
>
> Happy Easter,
> Guillaume Nodet
>
>
> 2014-04-20 5:15 GMT+02:00 Matthew DeVore <[email protected]>:
>
> > Hi,
> >
> > I'm trying to integrate Apache SSHD with my app and am running into a
> > strange issue. I can establish a connection and open a channel on a
> > subsystem, and then get the InputStreams and OutputStreams that
> correspond
> > to it. Data transferred over stderr and stdout seem to get transferred,
> but
> > anything written to stdin by the client is not getting to the server. The
> > client and server are both on localhost and using the SSHD library.
> >
> > I've written two unit tests to demonstrate this - one that passes
> > (connect-stdout-stderr) and one that deadlocks (connect-stdin). The code
> is
> > in Clojure. I'd be very grateful if someone could point me in the right
> > direction to fix the failing test.
> >
> > Thank you,
> > Matt
> >
> > *Application code*:
> >
> >
> https://github.com/matvore/hesokuri/blob/4d591abe22a3c24e8756b1316ef763be86b55225/src/hesokuri/ssh.clj
> > *Tests*:
> >
> >
> https://github.com/matvore/hesokuri/blob/4d591abe22a3c24e8756b1316ef763be86b55225/test/hesokuri/test_hesokuri/ssh.clj
> >
> > *Test log output:*
> > 19:41:38:matvore-macbookpro2:~/hesokuri$ lein test :only
> > hesokuri.test-hesokuri.ssh/connect-stdin
> >
> > lein test hesokuri.test-hesokuri.ssh
> > Apr 19, 2014 7:51:41 PM
> > org.apache.sshd.common.util.SecurityUtils$BouncyCastleRegistration run
> > 資訊: Trying to register BouncyCastle as a JCE provider
> > Apr 19, 2014 7:51:42 PM
> > org.apache.sshd.common.util.SecurityUtils$BouncyCastleRegistration run
> > 資訊: Registration succeeded
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.client.session.ClientSessionImpl
> > <init>
> > 資訊: Client session created
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.server.session.ServerSession
> <init>
> > 資訊: Server session created from /127.0.0.1:63408
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.client.session.ClientSessionImpl
> > readIdentification
> > 資訊: Server version string: SSH-2.0-SSHD-CORE-0.10.1
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.common.session.AbstractSession
> > negotiate
> > 資訊: Kex: server->client aes128-ctr hmac-sha2-256 none
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.common.session.AbstractSession
> > negotiate
> > 資訊: Kex: client->server aes128-ctr hmac-sha2-256 none
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.common.session.AbstractSession
> > negotiate
> > 資訊: Kex: server->client aes128-ctr hmac-sha2-256 none
> > Apr 19, 2014 7:51:42 PM org.apache.sshd.common.session.AbstractSession
> > negotiate
> > 資訊: Kex: client->server aes128-ctr hmac-sha2-256 none
> > Apr 19, 2014 7:51:43 PM
> > org.apache.sshd.server.session.ServerUserAuthService process
> > 資訊: Session hesokuri_user@/127.0.0.1:63408 authenticated
> > Apr 19, 2014 7:51:43 PM clojure.tools.logging$eval532$fn__538 invoke
> > 資訊: wait on promise...
> > Apr 19, 2014 7:51:43 PM clojure.tools.logging$eval532$fn__538 invoke
> > 資訊: read line...
> > *(deadlock here)*
> >
>

Reply via email to