mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Use generic ilist in Unix transport queue
This should improve performance. PiperOrigin-RevId: 217610560 Change-Id: I370f196ea2396f1715a460b168ecbee197f94d6c
This commit is contained in:
@@ -1,6 +1,19 @@
|
||||
package(licenses = ["notice"]) # Apache 2.0
|
||||
|
||||
load("//tools/go_stateify:defs.bzl", "go_library")
|
||||
load("//tools/go_generics:defs.bzl", "go_template_instance")
|
||||
|
||||
go_template_instance(
|
||||
name = "transport_message_list",
|
||||
out = "transport_message_list.go",
|
||||
package = "transport",
|
||||
prefix = "message",
|
||||
template = "//pkg/ilist:generic_list",
|
||||
types = {
|
||||
"Element": "*message",
|
||||
"Linker": "*message",
|
||||
},
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "transport",
|
||||
@@ -9,6 +22,7 @@ go_library(
|
||||
"connectioned_state.go",
|
||||
"connectionless.go",
|
||||
"queue.go",
|
||||
"transport_message_list.go",
|
||||
"unix.go",
|
||||
],
|
||||
importpath = "gvisor.googlesource.com/gvisor/pkg/sentry/socket/unix/transport",
|
||||
|
||||
@@ -17,7 +17,6 @@ package transport
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"gvisor.googlesource.com/gvisor/pkg/ilist"
|
||||
"gvisor.googlesource.com/gvisor/pkg/tcpip"
|
||||
"gvisor.googlesource.com/gvisor/pkg/waiter"
|
||||
)
|
||||
@@ -33,7 +32,7 @@ type queue struct {
|
||||
closed bool
|
||||
used int64
|
||||
limit int64
|
||||
dataList ilist.List
|
||||
dataList messageList
|
||||
}
|
||||
|
||||
// newQueue allocates and initializes a new queue.
|
||||
@@ -61,7 +60,7 @@ func (q *queue) Close() {
|
||||
func (q *queue) Reset() {
|
||||
q.mu.Lock()
|
||||
for cur := q.dataList.Front(); cur != nil; cur = cur.Next() {
|
||||
cur.(*message).Release()
|
||||
cur.Release()
|
||||
}
|
||||
q.dataList.Reset()
|
||||
q.used = 0
|
||||
@@ -165,7 +164,7 @@ func (q *queue) Dequeue() (e *message, notify bool, err *tcpip.Error) {
|
||||
|
||||
notify = !q.bufWritable()
|
||||
|
||||
e = q.dataList.Front().(*message)
|
||||
e = q.dataList.Front()
|
||||
q.dataList.Remove(e)
|
||||
q.used -= e.Length()
|
||||
|
||||
@@ -189,7 +188,7 @@ func (q *queue) Peek() (*message, *tcpip.Error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return q.dataList.Front().(*message).Peek(), nil
|
||||
return q.dataList.Front().Peek(), nil
|
||||
}
|
||||
|
||||
// QueuedSize returns the number of bytes currently in the queue, that is, the
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"gvisor.googlesource.com/gvisor/pkg/ilist"
|
||||
"gvisor.googlesource.com/gvisor/pkg/tcpip"
|
||||
"gvisor.googlesource.com/gvisor/pkg/tcpip/buffer"
|
||||
"gvisor.googlesource.com/gvisor/pkg/waiter"
|
||||
@@ -243,7 +242,7 @@ type BoundEndpoint interface {
|
||||
//
|
||||
// +stateify savable
|
||||
type message struct {
|
||||
ilist.Entry
|
||||
messageEntry
|
||||
|
||||
// Data is the Message payload.
|
||||
Data buffer.View
|
||||
|
||||
Reference in New Issue
Block a user