summaryrefslogtreecommitdiffhomepage
path: root/pkg/p9/server.go
diff options
context:
space:
mode:
authorFabricio Voznika <fvoznika@google.com>2019-04-29 15:32:45 -0700
committerShentubot <shentubot@google.com>2019-04-29 15:33:47 -0700
commitddab854b9a895603664fa4abfa525f6a29047083 (patch)
tree349b428a042c7e7e0d7de71e56a319f7df3ae29b /pkg/p9/server.go
parent4d52a5520101a88424fb63dd99412a1db33fbd06 (diff)
Reduce memory allocations on serving path
Cache last used messages and reuse them for subsequent requests. If more messages are needed, they are created outside the cache on demand. PiperOrigin-RevId: 245836910 Change-Id: Icf099ddff95df420db8e09f5cdd41dcdce406c61
Diffstat (limited to 'pkg/p9/server.go')
-rw-r--r--pkg/p9/server.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/pkg/p9/server.go b/pkg/p9/server.go
index b2a86d8fa..f377a6557 100644
--- a/pkg/p9/server.go
+++ b/pkg/p9/server.go
@@ -395,7 +395,7 @@ func (cs *connState) handleRequest() {
}
// Receive a message.
- tag, m, err := recv(cs.conn, messageSize, messageByType)
+ tag, m, err := recv(cs.conn, messageSize, msgRegistry.get)
if errSocket, ok := err.(ErrSocket); ok {
// Connection problem; stop serving.
cs.recvDone <- errSocket.error
@@ -458,6 +458,8 @@ func (cs *connState) handleRequest() {
// Produce an ENOSYS error.
r = newErr(syscall.ENOSYS)
}
+ msgRegistry.put(m)
+ m = nil // 'm' should not be touched after this point.
}
func (cs *connState) handleRequests() {