remove slice limit

This commit is contained in:
Alexis PIRES 2020-01-08 14:27:53 +01:00
parent c8335d667e
commit a400c5deff
1 changed files with 19 additions and 1 deletions

20
conn.go
View File

@ -39,6 +39,7 @@ type Conn struct {
TestDial nltest.Func // for testing only; passed to nltest.Dial
NetNS int // Network namespace netlink will interact with.
sync.Mutex
put sync.Mutex
messages []netlink.Message
entities map[int32]Entity
it int32
@ -104,8 +105,11 @@ func (cc *Conn) Flush() error {
// PutMessage store netlink message to sent after
func (cc *Conn) PutMessage(msg netlink.Message) int32 {
cc.put.Lock()
defer cc.put.Unlock()
if cc.messages == nil {
cc.messages = make([]netlink.Message, 128)
cc.messages = make([]netlink.Message, 16)
cc.messages[0] = netlink.Message{
Header: netlink.Header{
Type: netlink.HeaderType(unix.NFNL_MSG_BATCH_BEGIN),
@ -117,6 +121,10 @@ func (cc *Conn) PutMessage(msg netlink.Message) int32 {
i := atomic.AddInt32(&cc.it, 1)
if len(cc.messages) <= int(i) {
cc.messages = resize(cc.messages)
}
cc.messages[i] = msg
return i
@ -208,6 +216,10 @@ func (cc *Conn) endBatch(messages []netlink.Message) {
i := atomic.AddInt32(&cc.it, 1)
if len(cc.messages) <= int(i) {
cc.messages = resize(cc.messages)
}
cc.messages[i] = netlink.Message{
Header: netlink.Header{
Type: netlink.HeaderType(unix.NFNL_MSG_BATCH_END),
@ -216,3 +228,9 @@ func (cc *Conn) endBatch(messages []netlink.Message) {
Data: extraHeader(0, unix.NFNL_SUBSYS_NFTABLES),
}
}
func resize(messages []netlink.Message) []netlink.Message {
new := make([]netlink.Message, cap(messages)*2)
copy(new, messages)
return new
}