decouple packet channel from server struct
looking to create 2 pools, so I want to pass the channel in
diff --git a/server.go b/server.go
index a61f544..39011f8 100644
--- a/server.go
+++ b/server.go
@@ -29,7 +29,6 @@
serverConn
debugStream io.Writer
readOnly bool
- pktChan chan requestPacket
pktMgr packetManager
openFiles map[string]*os.File
openFilesLock sync.RWMutex
@@ -85,7 +84,6 @@
s := &Server{
serverConn: svrConn,
debugStream: ioutil.Discard,
- pktChan: make(chan requestPacket, sftpServerWorkerCount),
pktMgr: newPktMgr(&svrConn),
openFiles: make(map[string]*os.File),
maxTxPacket: 1 << 15,
@@ -125,8 +123,8 @@
}
// Up to N parallel servers
-func (svr *Server) sftpServerWorker() error {
- for pkt := range svr.pktChan {
+func (svr *Server) sftpServerWorker(pktChan chan requestPacket) error {
+ for pkt := range pktChan {
// readonly checks
readonly := true
@@ -285,10 +283,11 @@
func (svr *Server) Serve() error {
var wg sync.WaitGroup
wg.Add(sftpServerWorkerCount)
+ pktChan := make(chan requestPacket, sftpServerWorkerCount)
for i := 0; i < sftpServerWorkerCount; i++ {
go func() {
defer wg.Done()
- if err := svr.sftpServerWorker(); err != nil {
+ if err := svr.sftpServerWorker(pktChan); err != nil {
svr.conn.Close() // shuts down recvPacket
}
}()
@@ -312,10 +311,10 @@
}
svr.pktMgr.incomingPacket(pkt)
- svr.pktChan <- pkt
+ pktChan <- pkt
}
- close(svr.pktChan) // shuts down sftpServerWorkers
+ close(pktChan) // shuts down sftpServerWorkers
wg.Wait() // wait for all workers to exit
svr.pktMgr.close() // shuts down packetManager