the test hangs.
It looks like all 8 of the server side workers are blocked responding to write requests:
#1:
goroutine 23 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc8200da1e0, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x58, 0xc820122200, 0x1, 0x277fff, 0x8000, 0xc82011a000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc820078c40, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#2:
goroutine 24 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc8200d4000, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x5b, 0xc8200aa030, 0x1, 0x28ffff, 0x8000, 0xc8205fe000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc8200d0040, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#3:
goroutine 25 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc8200101b0, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x55, 0xc8200e0170, 0x1, 0x25ffff, 0x8000, 0xc820296000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc82012e280, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#4:
goroutine 26 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc820104000, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x59, 0xc82007c440, 0x1, 0x27ffff, 0x8000, 0xc8205a4000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc820014400, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#5:
goroutine 27 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc820010150, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x5d, 0xc8200c4090, 0x1, 0x29ffff, 0x8000, 0xc82086a000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc8200c2140, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#6:
goroutine 28 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc8200d6000, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x5e, 0xc8200a0070, 0x1, 0x2a7fff, 0x8000, 0xc820886000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc8201021c0, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#7:
goroutine 29 [semacquire]:
sync.runtime_Syncsemacquire(0xc8200f0138)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:237 +0x201
sync.(*Cond).Wait(0xc8200f0128)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/cond.go:62 +0x9b
io.(*pipe).write(0xc8200f00c0, 0xc8200c4230, 0x4, 0x4, 0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.5.2/libexec/src/io/pipe.go:94 +0x23a
io.(*PipeWriter).Write(0xc82008c048, 0xc8200c4230, 0x4, 0x4, 0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.5.2/libexec/src/io/pipe.go:161 +0x50
github.com/pkg/sftp.sendPacket(0x784ab8, 0xc82008c048, 0x7402c8, 0xc820010210, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:125 +0x222
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc820010210, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:137 +0xc4
github.com/pkg/sftp.sshFxpWritePacket.respond(0x64, 0xc8200c41f0, 0x1, 0x2d7fff, 0x8000, 0xc820574000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc8200c2340, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
#8:
goroutine 30 [semacquire]:
sync.runtime_Semacquire(0xc82007d0f4)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:43 +0x26
sync.(*Mutex).Lock(0xc82007d0f0)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/mutex.go:82 +0x1c4
github.com/pkg/sftp.(*Server).sendPacket(0xc8200c7b90, 0x7402c8, 0xc820100030, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:135 +0x35
github.com/pkg/sftp.sshFxpWritePacket.respond(0x5a, 0xc820012110, 0x1, 0x287fff, 0x8000, 0xc8205c0000, 0x8000, 0x8000, 0xc8200c7b90, 0x0, ...)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:445 +0x3e3
github.com/pkg/sftp.(*sshFxpWritePacket).respond(0xc8200de080, 0xc8200c7b90, 0x0, 0x0)
<autogenerated>:57 +0xac
github.com/pkg/sftp.(*Server).sftpServerWorker(0xc8200c7b90, 0xc8200d3b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:138 +0x2ad
created by github.com/pkg/sftp.(*Server).Serve
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/server.go:148 +0xe0
While that's happening, the client is holding its mutex while trying to send a packet to the server (which has no workers to receive):
goroutine 20 [semacquire]:
sync.runtime_Syncsemacquire(0xc8200f0078)
/usr/local/Cellar/go/1.5.2/libexec/src/runtime/sema.go:237 +0x201
sync.(*Cond).Wait(0xc8200f0068)
/usr/local/Cellar/go/1.5.2/libexec/src/sync/cond.go:62 +0x9b
io.(*pipe).write(0xc8200f0000, 0xc8200aa050, 0x4, 0x4, 0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.5.2/libexec/src/io/pipe.go:94 +0x23a
io.(*PipeWriter).Write(0xc82008c038, 0xc8200aa050, 0x4, 0x4, 0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.5.2/libexec/src/io/pipe.go:161 +0x50
github.com/pkg/sftp.sendPacket(0x784ab8, 0xc82008c038, 0x7847d8, 0xc8200d0100, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/packet.go:125 +0x222
github.com/pkg/sftp.(*Client).dispatchRequest(0xc8200d92c0, 0xc82007a1e0, 0x740268, 0xc8200d0100)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/client.go:668 +0x13d
github.com/pkg/sftp.(*File).Write(0xc820010330, 0xc820774000, 0xd8000, 0xd8000, 0x200000, 0x0, 0x0)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/client.go:980 +0x296
github.com/pkg/sftp.TestClientWrite(0xc8200c7b00)
/Users/sykesm/workspace/diego-release/src/github.com/pkg/sftp/client_integration_test.go:1026 +0x547
testing.tRunner(0xc8200c7b00, 0x5141a8)
/usr/local/Cellar/go/1.5.2/libexec/src/testing/testing.go:456 +0x98
created by testing.RunTests
/usr/local/Cellar/go/1.5.2/libexec/src/testing/testing.go:561 +0x86d
And the server responses are not being processed by the client because the client is blocked trying to acquire the mutex that is currently held by the blocked send: