diff --git a/pkg/tcpip/buffer/buffer_state_autogen.go b/pkg/tcpip/buffer/buffer_state_autogen.go
index 9f0e96e..51bfbff 100644
--- a/pkg/tcpip/buffer/buffer_state_autogen.go
+++ b/pkg/tcpip/buffer/buffer_state_autogen.go
@@ -19,6 +19,7 @@
 
 func (vv *VectorisedView) beforeSave() {}
 
+// +checklocksignore
 func (vv *VectorisedView) StateSave(stateSinkObject state.Sink) {
 	vv.beforeSave()
 	stateSinkObject.Save(0, &vv.views)
@@ -27,6 +28,7 @@
 
 func (vv *VectorisedView) afterLoad() {}
 
+// +checklocksignore
 func (vv *VectorisedView) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &vv.views)
 	stateSourceObject.Load(1, &vv.size)
diff --git a/pkg/tcpip/header/header_state_autogen.go b/pkg/tcpip/header/header_state_autogen.go
index ddcc980..d6dd588 100644
--- a/pkg/tcpip/header/header_state_autogen.go
+++ b/pkg/tcpip/header/header_state_autogen.go
@@ -19,6 +19,7 @@
 
 func (r *SACKBlock) beforeSave() {}
 
+// +checklocksignore
 func (r *SACKBlock) StateSave(stateSinkObject state.Sink) {
 	r.beforeSave()
 	stateSinkObject.Save(0, &r.Start)
@@ -27,6 +28,7 @@
 
 func (r *SACKBlock) afterLoad() {}
 
+// +checklocksignore
 func (r *SACKBlock) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &r.Start)
 	stateSourceObject.Load(1, &r.End)
@@ -47,6 +49,7 @@
 
 func (t *TCPOptions) beforeSave() {}
 
+// +checklocksignore
 func (t *TCPOptions) StateSave(stateSinkObject state.Sink) {
 	t.beforeSave()
 	stateSinkObject.Save(0, &t.TS)
@@ -57,6 +60,7 @@
 
 func (t *TCPOptions) afterLoad() {}
 
+// +checklocksignore
 func (t *TCPOptions) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &t.TS)
 	stateSourceObject.Load(1, &t.TSVal)
diff --git a/pkg/tcpip/network/internal/fragmentation/fragmentation_state_autogen.go b/pkg/tcpip/network/internal/fragmentation/fragmentation_state_autogen.go
index 3f82c18..21c5774 100644
--- a/pkg/tcpip/network/internal/fragmentation/fragmentation_state_autogen.go
+++ b/pkg/tcpip/network/internal/fragmentation/fragmentation_state_autogen.go
@@ -19,6 +19,7 @@
 
 func (l *reassemblerList) beforeSave() {}
 
+// +checklocksignore
 func (l *reassemblerList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -27,6 +28,7 @@
 
 func (l *reassemblerList) afterLoad() {}
 
+// +checklocksignore
 func (l *reassemblerList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -45,6 +47,7 @@
 
 func (e *reassemblerEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *reassemblerEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -53,6 +56,7 @@
 
 func (e *reassemblerEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *reassemblerEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/tcpip/network/ipv4/ipv4_state_autogen.go b/pkg/tcpip/network/ipv4/ipv4_state_autogen.go
index 87a48e2..19b6722 100644
--- a/pkg/tcpip/network/ipv4/ipv4_state_autogen.go
+++ b/pkg/tcpip/network/ipv4/ipv4_state_autogen.go
@@ -16,12 +16,14 @@
 
 func (i *icmpv4DestinationUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv4DestinationUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 }
 
 func (i *icmpv4DestinationUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv4DestinationUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -37,6 +39,7 @@
 
 func (i *icmpv4DestinationHostUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv4DestinationHostUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 	stateSinkObject.Save(0, &i.icmpv4DestinationUnreachableSockError)
@@ -44,6 +47,7 @@
 
 func (i *icmpv4DestinationHostUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv4DestinationHostUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &i.icmpv4DestinationUnreachableSockError)
 }
@@ -60,6 +64,7 @@
 
 func (i *icmpv4DestinationPortUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv4DestinationPortUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 	stateSinkObject.Save(0, &i.icmpv4DestinationUnreachableSockError)
@@ -67,6 +72,7 @@
 
 func (i *icmpv4DestinationPortUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv4DestinationPortUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &i.icmpv4DestinationUnreachableSockError)
 }
@@ -84,6 +90,7 @@
 
 func (e *icmpv4FragmentationNeededSockError) beforeSave() {}
 
+// +checklocksignore
 func (e *icmpv4FragmentationNeededSockError) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.icmpv4DestinationUnreachableSockError)
@@ -92,6 +99,7 @@
 
 func (e *icmpv4FragmentationNeededSockError) afterLoad() {}
 
+// +checklocksignore
 func (e *icmpv4FragmentationNeededSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.icmpv4DestinationUnreachableSockError)
 	stateSourceObject.Load(1, &e.mtu)
diff --git a/pkg/tcpip/network/ipv6/ipv6_state_autogen.go b/pkg/tcpip/network/ipv6/ipv6_state_autogen.go
index 675fdc2..13d4278 100644
--- a/pkg/tcpip/network/ipv6/ipv6_state_autogen.go
+++ b/pkg/tcpip/network/ipv6/ipv6_state_autogen.go
@@ -16,12 +16,14 @@
 
 func (i *icmpv6DestinationUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 }
 
 func (i *icmpv6DestinationUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -37,6 +39,7 @@
 
 func (i *icmpv6DestinationNetworkUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationNetworkUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 	stateSinkObject.Save(0, &i.icmpv6DestinationUnreachableSockError)
@@ -44,6 +47,7 @@
 
 func (i *icmpv6DestinationNetworkUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationNetworkUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &i.icmpv6DestinationUnreachableSockError)
 }
@@ -60,6 +64,7 @@
 
 func (i *icmpv6DestinationPortUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationPortUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 	stateSinkObject.Save(0, &i.icmpv6DestinationUnreachableSockError)
@@ -67,6 +72,7 @@
 
 func (i *icmpv6DestinationPortUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationPortUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &i.icmpv6DestinationUnreachableSockError)
 }
@@ -83,6 +89,7 @@
 
 func (i *icmpv6DestinationAddressUnreachableSockError) beforeSave() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationAddressUnreachableSockError) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 	stateSinkObject.Save(0, &i.icmpv6DestinationUnreachableSockError)
@@ -90,6 +97,7 @@
 
 func (i *icmpv6DestinationAddressUnreachableSockError) afterLoad() {}
 
+// +checklocksignore
 func (i *icmpv6DestinationAddressUnreachableSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &i.icmpv6DestinationUnreachableSockError)
 }
@@ -106,6 +114,7 @@
 
 func (e *icmpv6PacketTooBigSockError) beforeSave() {}
 
+// +checklocksignore
 func (e *icmpv6PacketTooBigSockError) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.mtu)
@@ -113,6 +122,7 @@
 
 func (e *icmpv6PacketTooBigSockError) afterLoad() {}
 
+// +checklocksignore
 func (e *icmpv6PacketTooBigSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.mtu)
 }
diff --git a/pkg/tcpip/ports/ports_state_autogen.go b/pkg/tcpip/ports/ports_state_autogen.go
index 1e1d9cd..2719f6c 100644
--- a/pkg/tcpip/ports/ports_state_autogen.go
+++ b/pkg/tcpip/ports/ports_state_autogen.go
@@ -20,6 +20,7 @@
 
 func (f *Flags) beforeSave() {}
 
+// +checklocksignore
 func (f *Flags) StateSave(stateSinkObject state.Sink) {
 	f.beforeSave()
 	stateSinkObject.Save(0, &f.MostRecent)
@@ -29,6 +30,7 @@
 
 func (f *Flags) afterLoad() {}
 
+// +checklocksignore
 func (f *Flags) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &f.MostRecent)
 	stateSourceObject.Load(1, &f.LoadBalanced)
diff --git a/pkg/tcpip/stack/stack_state_autogen.go b/pkg/tcpip/stack/stack_state_autogen.go
index 462139b..6b10c1e 100644
--- a/pkg/tcpip/stack/stack_state_autogen.go
+++ b/pkg/tcpip/stack/stack_state_autogen.go
@@ -21,6 +21,7 @@
 
 func (t *tuple) beforeSave() {}
 
+// +checklocksignore
 func (t *tuple) StateSave(stateSinkObject state.Sink) {
 	t.beforeSave()
 	stateSinkObject.Save(0, &t.tupleEntry)
@@ -31,6 +32,7 @@
 
 func (t *tuple) afterLoad() {}
 
+// +checklocksignore
 func (t *tuple) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &t.tupleEntry)
 	stateSourceObject.Load(1, &t.tupleID)
@@ -55,6 +57,7 @@
 
 func (ti *tupleID) beforeSave() {}
 
+// +checklocksignore
 func (ti *tupleID) StateSave(stateSinkObject state.Sink) {
 	ti.beforeSave()
 	stateSinkObject.Save(0, &ti.srcAddr)
@@ -67,6 +70,7 @@
 
 func (ti *tupleID) afterLoad() {}
 
+// +checklocksignore
 func (ti *tupleID) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &ti.srcAddr)
 	stateSourceObject.Load(1, &ti.srcPort)
@@ -93,6 +97,7 @@
 
 func (cn *conn) beforeSave() {}
 
+// +checklocksignore
 func (cn *conn) StateSave(stateSinkObject state.Sink) {
 	cn.beforeSave()
 	var lastUsedValue unixTime = cn.saveLastUsed()
@@ -106,6 +111,7 @@
 
 func (cn *conn) afterLoad() {}
 
+// +checklocksignore
 func (cn *conn) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &cn.original)
 	stateSourceObject.Load(1, &cn.reply)
@@ -126,6 +132,7 @@
 	}
 }
 
+// +checklocksignore
 func (ct *ConnTrack) StateSave(stateSinkObject state.Sink) {
 	ct.beforeSave()
 	stateSinkObject.Save(0, &ct.seed)
@@ -134,6 +141,7 @@
 
 func (ct *ConnTrack) afterLoad() {}
 
+// +checklocksignore
 func (ct *ConnTrack) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &ct.seed)
 	stateSourceObject.Load(1, &ct.buckets)
@@ -151,6 +159,7 @@
 
 func (b *bucket) beforeSave() {}
 
+// +checklocksignore
 func (b *bucket) StateSave(stateSinkObject state.Sink) {
 	b.beforeSave()
 	stateSinkObject.Save(0, &b.tuples)
@@ -158,6 +167,7 @@
 
 func (b *bucket) afterLoad() {}
 
+// +checklocksignore
 func (b *bucket) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &b.tuples)
 }
@@ -175,6 +185,7 @@
 
 func (u *unixTime) beforeSave() {}
 
+// +checklocksignore
 func (u *unixTime) StateSave(stateSinkObject state.Sink) {
 	u.beforeSave()
 	stateSinkObject.Save(0, &u.second)
@@ -183,6 +194,7 @@
 
 func (u *unixTime) afterLoad() {}
 
+// +checklocksignore
 func (u *unixTime) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &u.second)
 	stateSourceObject.Load(1, &u.nano)
@@ -204,6 +216,7 @@
 	}
 }
 
+// +checklocksignore
 func (it *IPTables) StateSave(stateSinkObject state.Sink) {
 	it.beforeSave()
 	stateSinkObject.Save(0, &it.mu)
@@ -215,6 +228,7 @@
 	stateSinkObject.Save(6, &it.reaperDone)
 }
 
+// +checklocksignore
 func (it *IPTables) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &it.mu)
 	stateSourceObject.Load(1, &it.v4Tables)
@@ -240,6 +254,7 @@
 
 func (table *Table) beforeSave() {}
 
+// +checklocksignore
 func (table *Table) StateSave(stateSinkObject state.Sink) {
 	table.beforeSave()
 	stateSinkObject.Save(0, &table.Rules)
@@ -249,6 +264,7 @@
 
 func (table *Table) afterLoad() {}
 
+// +checklocksignore
 func (table *Table) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &table.Rules)
 	stateSourceObject.Load(1, &table.BuiltinChains)
@@ -269,6 +285,7 @@
 
 func (r *Rule) beforeSave() {}
 
+// +checklocksignore
 func (r *Rule) StateSave(stateSinkObject state.Sink) {
 	r.beforeSave()
 	stateSinkObject.Save(0, &r.Filter)
@@ -278,6 +295,7 @@
 
 func (r *Rule) afterLoad() {}
 
+// +checklocksignore
 func (r *Rule) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &r.Filter)
 	stateSourceObject.Load(1, &r.Matchers)
@@ -309,6 +327,7 @@
 
 func (fl *IPHeaderFilter) beforeSave() {}
 
+// +checklocksignore
 func (fl *IPHeaderFilter) StateSave(stateSinkObject state.Sink) {
 	fl.beforeSave()
 	stateSinkObject.Save(0, &fl.Protocol)
@@ -329,6 +348,7 @@
 
 func (fl *IPHeaderFilter) afterLoad() {}
 
+// +checklocksignore
 func (fl *IPHeaderFilter) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &fl.Protocol)
 	stateSourceObject.Load(1, &fl.CheckProtocol)
@@ -359,6 +379,7 @@
 
 func (l *neighborEntryList) beforeSave() {}
 
+// +checklocksignore
 func (l *neighborEntryList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -367,6 +388,7 @@
 
 func (l *neighborEntryList) afterLoad() {}
 
+// +checklocksignore
 func (l *neighborEntryList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -385,6 +407,7 @@
 
 func (e *neighborEntryEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *neighborEntryEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -393,6 +416,7 @@
 
 func (e *neighborEntryEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *neighborEntryEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
@@ -411,6 +435,7 @@
 
 func (p *PacketBufferList) beforeSave() {}
 
+// +checklocksignore
 func (p *PacketBufferList) StateSave(stateSinkObject state.Sink) {
 	p.beforeSave()
 	stateSinkObject.Save(0, &p.head)
@@ -419,6 +444,7 @@
 
 func (p *PacketBufferList) afterLoad() {}
 
+// +checklocksignore
 func (p *PacketBufferList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &p.head)
 	stateSourceObject.Load(1, &p.tail)
@@ -437,6 +463,7 @@
 
 func (e *PacketBufferEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *PacketBufferEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -445,6 +472,7 @@
 
 func (e *PacketBufferEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *PacketBufferEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
@@ -465,6 +493,7 @@
 
 func (t *TransportEndpointID) beforeSave() {}
 
+// +checklocksignore
 func (t *TransportEndpointID) StateSave(stateSinkObject state.Sink) {
 	t.beforeSave()
 	stateSinkObject.Save(0, &t.LocalPort)
@@ -475,6 +504,7 @@
 
 func (t *TransportEndpointID) afterLoad() {}
 
+// +checklocksignore
 func (t *TransportEndpointID) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &t.LocalPort)
 	stateSourceObject.Load(1, &t.LocalAddress)
@@ -507,6 +537,7 @@
 
 func (g *GSO) beforeSave() {}
 
+// +checklocksignore
 func (g *GSO) StateSave(stateSinkObject state.Sink) {
 	g.beforeSave()
 	stateSinkObject.Save(0, &g.Type)
@@ -519,6 +550,7 @@
 
 func (g *GSO) afterLoad() {}
 
+// +checklocksignore
 func (g *GSO) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &g.Type)
 	stateSourceObject.Load(1, &g.NeedsCsum)
@@ -545,6 +577,7 @@
 
 func (t *TransportEndpointInfo) beforeSave() {}
 
+// +checklocksignore
 func (t *TransportEndpointInfo) StateSave(stateSinkObject state.Sink) {
 	t.beforeSave()
 	stateSinkObject.Save(0, &t.NetProto)
@@ -557,6 +590,7 @@
 
 func (t *TransportEndpointInfo) afterLoad() {}
 
+// +checklocksignore
 func (t *TransportEndpointInfo) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &t.NetProto)
 	stateSourceObject.Load(1, &t.TransProto)
@@ -582,6 +616,7 @@
 
 func (ep *multiPortEndpoint) beforeSave() {}
 
+// +checklocksignore
 func (ep *multiPortEndpoint) StateSave(stateSinkObject state.Sink) {
 	ep.beforeSave()
 	stateSinkObject.Save(0, &ep.demux)
@@ -593,6 +628,7 @@
 
 func (ep *multiPortEndpoint) afterLoad() {}
 
+// +checklocksignore
 func (ep *multiPortEndpoint) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &ep.demux)
 	stateSourceObject.Load(1, &ep.netProto)
@@ -614,6 +650,7 @@
 
 func (l *tupleList) beforeSave() {}
 
+// +checklocksignore
 func (l *tupleList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -622,6 +659,7 @@
 
 func (l *tupleList) afterLoad() {}
 
+// +checklocksignore
 func (l *tupleList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -640,6 +678,7 @@
 
 func (e *tupleEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *tupleEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -648,6 +687,7 @@
 
 func (e *tupleEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *tupleEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/tcpip/tcpip_state_autogen.go b/pkg/tcpip/tcpip_state_autogen.go
index 743e1b5..2557f2b 100644
--- a/pkg/tcpip/tcpip_state_autogen.go
+++ b/pkg/tcpip/tcpip_state_autogen.go
@@ -16,12 +16,14 @@
 
 func (e *ErrAborted) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrAborted) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrAborted) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrAborted) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -35,12 +37,14 @@
 
 func (e *ErrAddressFamilyNotSupported) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrAddressFamilyNotSupported) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrAddressFamilyNotSupported) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrAddressFamilyNotSupported) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -54,12 +58,14 @@
 
 func (e *ErrAlreadyBound) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrAlreadyBound) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrAlreadyBound) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrAlreadyBound) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -73,12 +79,14 @@
 
 func (e *ErrAlreadyConnected) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrAlreadyConnected) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrAlreadyConnected) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrAlreadyConnected) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -92,12 +100,14 @@
 
 func (e *ErrAlreadyConnecting) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrAlreadyConnecting) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrAlreadyConnecting) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrAlreadyConnecting) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -111,12 +121,14 @@
 
 func (e *ErrBadAddress) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrBadAddress) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrBadAddress) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrBadAddress) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -130,12 +142,14 @@
 
 func (e *ErrBadBuffer) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrBadBuffer) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrBadBuffer) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrBadBuffer) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -149,12 +163,14 @@
 
 func (e *ErrBadLocalAddress) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrBadLocalAddress) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrBadLocalAddress) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrBadLocalAddress) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -168,12 +184,14 @@
 
 func (e *ErrBroadcastDisabled) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrBroadcastDisabled) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrBroadcastDisabled) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrBroadcastDisabled) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -187,12 +205,14 @@
 
 func (e *ErrClosedForReceive) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrClosedForReceive) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrClosedForReceive) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrClosedForReceive) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -206,12 +226,14 @@
 
 func (e *ErrClosedForSend) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrClosedForSend) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrClosedForSend) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrClosedForSend) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -225,12 +247,14 @@
 
 func (e *ErrConnectStarted) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrConnectStarted) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrConnectStarted) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrConnectStarted) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -244,12 +268,14 @@
 
 func (e *ErrConnectionAborted) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrConnectionAborted) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrConnectionAborted) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrConnectionAborted) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -263,12 +289,14 @@
 
 func (e *ErrConnectionRefused) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrConnectionRefused) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrConnectionRefused) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrConnectionRefused) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -282,12 +310,14 @@
 
 func (e *ErrConnectionReset) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrConnectionReset) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrConnectionReset) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrConnectionReset) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -301,12 +331,14 @@
 
 func (e *ErrDestinationRequired) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrDestinationRequired) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrDestinationRequired) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrDestinationRequired) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -320,12 +352,14 @@
 
 func (e *ErrDuplicateAddress) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrDuplicateAddress) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrDuplicateAddress) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrDuplicateAddress) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -339,12 +373,14 @@
 
 func (e *ErrDuplicateNICID) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrDuplicateNICID) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrDuplicateNICID) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrDuplicateNICID) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -358,12 +394,14 @@
 
 func (e *ErrInvalidEndpointState) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrInvalidEndpointState) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrInvalidEndpointState) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrInvalidEndpointState) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -377,12 +415,14 @@
 
 func (e *ErrInvalidOptionValue) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrInvalidOptionValue) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrInvalidOptionValue) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrInvalidOptionValue) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -396,12 +436,14 @@
 
 func (e *ErrInvalidPortRange) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrInvalidPortRange) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrInvalidPortRange) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrInvalidPortRange) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -415,12 +457,14 @@
 
 func (e *ErrMalformedHeader) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrMalformedHeader) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrMalformedHeader) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrMalformedHeader) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -434,12 +478,14 @@
 
 func (e *ErrMessageTooLong) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrMessageTooLong) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrMessageTooLong) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrMessageTooLong) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -453,12 +499,14 @@
 
 func (e *ErrNetworkUnreachable) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNetworkUnreachable) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNetworkUnreachable) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNetworkUnreachable) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -472,12 +520,14 @@
 
 func (e *ErrNoBufferSpace) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNoBufferSpace) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNoBufferSpace) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNoBufferSpace) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -491,12 +541,14 @@
 
 func (e *ErrNoPortAvailable) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNoPortAvailable) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNoPortAvailable) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNoPortAvailable) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -510,12 +562,14 @@
 
 func (e *ErrNoRoute) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNoRoute) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNoRoute) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNoRoute) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -529,12 +583,14 @@
 
 func (e *ErrNoSuchFile) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNoSuchFile) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNoSuchFile) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNoSuchFile) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -548,12 +604,14 @@
 
 func (e *ErrNotConnected) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNotConnected) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNotConnected) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNotConnected) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -567,12 +625,14 @@
 
 func (e *ErrNotPermitted) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNotPermitted) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNotPermitted) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNotPermitted) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -586,12 +646,14 @@
 
 func (e *ErrNotSupported) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrNotSupported) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrNotSupported) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrNotSupported) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -605,12 +667,14 @@
 
 func (e *ErrPortInUse) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrPortInUse) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrPortInUse) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrPortInUse) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -624,12 +688,14 @@
 
 func (e *ErrQueueSizeNotSupported) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrQueueSizeNotSupported) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrQueueSizeNotSupported) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrQueueSizeNotSupported) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -643,12 +709,14 @@
 
 func (e *ErrTimeout) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrTimeout) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrTimeout) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrTimeout) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -662,12 +730,14 @@
 
 func (e *ErrUnknownDevice) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrUnknownDevice) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrUnknownDevice) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrUnknownDevice) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -681,12 +751,14 @@
 
 func (e *ErrUnknownNICID) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrUnknownNICID) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrUnknownNICID) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrUnknownNICID) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -700,12 +772,14 @@
 
 func (e *ErrUnknownProtocol) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrUnknownProtocol) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrUnknownProtocol) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrUnknownProtocol) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -719,12 +793,14 @@
 
 func (e *ErrUnknownProtocolOption) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrUnknownProtocolOption) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrUnknownProtocolOption) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrUnknownProtocolOption) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -738,12 +814,14 @@
 
 func (e *ErrWouldBlock) beforeSave() {}
 
+// +checklocksignore
 func (e *ErrWouldBlock) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 }
 
 func (e *ErrWouldBlock) afterLoad() {}
 
+// +checklocksignore
 func (e *ErrWouldBlock) StateLoad(stateSourceObject state.Source) {
 }
 
@@ -760,6 +838,7 @@
 
 func (l *sockErrorList) beforeSave() {}
 
+// +checklocksignore
 func (l *sockErrorList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -768,6 +847,7 @@
 
 func (l *sockErrorList) afterLoad() {}
 
+// +checklocksignore
 func (l *sockErrorList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -786,6 +866,7 @@
 
 func (e *sockErrorEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *sockErrorEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -794,6 +875,7 @@
 
 func (e *sockErrorEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *sockErrorEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
@@ -832,6 +914,7 @@
 
 func (so *SocketOptions) beforeSave() {}
 
+// +checklocksignore
 func (so *SocketOptions) StateSave(stateSinkObject state.Sink) {
 	so.beforeSave()
 	stateSinkObject.Save(0, &so.handler)
@@ -860,6 +943,7 @@
 
 func (so *SocketOptions) afterLoad() {}
 
+// +checklocksignore
 func (so *SocketOptions) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &so.handler)
 	stateSourceObject.Load(1, &so.broadcastEnabled)
@@ -897,6 +981,7 @@
 
 func (l *LocalSockError) beforeSave() {}
 
+// +checklocksignore
 func (l *LocalSockError) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.info)
@@ -904,6 +989,7 @@
 
 func (l *LocalSockError) afterLoad() {}
 
+// +checklocksignore
 func (l *LocalSockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.info)
 }
@@ -926,6 +1012,7 @@
 
 func (s *SockError) beforeSave() {}
 
+// +checklocksignore
 func (s *SockError) StateSave(stateSinkObject state.Sink) {
 	s.beforeSave()
 	stateSinkObject.Save(0, &s.sockErrorEntry)
@@ -939,6 +1026,7 @@
 
 func (s *SockError) afterLoad() {}
 
+// +checklocksignore
 func (s *SockError) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &s.sockErrorEntry)
 	stateSourceObject.Load(1, &s.Err)
@@ -963,6 +1051,7 @@
 
 func (f *FullAddress) beforeSave() {}
 
+// +checklocksignore
 func (f *FullAddress) StateSave(stateSinkObject state.Sink) {
 	f.beforeSave()
 	stateSinkObject.Save(0, &f.NIC)
@@ -972,6 +1061,7 @@
 
 func (f *FullAddress) afterLoad() {}
 
+// +checklocksignore
 func (f *FullAddress) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &f.NIC)
 	stateSourceObject.Load(1, &f.Addr)
@@ -1002,6 +1092,7 @@
 
 func (c *ControlMessages) beforeSave() {}
 
+// +checklocksignore
 func (c *ControlMessages) StateSave(stateSinkObject state.Sink) {
 	c.beforeSave()
 	stateSinkObject.Save(0, &c.HasTimestamp)
@@ -1021,6 +1112,7 @@
 
 func (c *ControlMessages) afterLoad() {}
 
+// +checklocksignore
 func (c *ControlMessages) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &c.HasTimestamp)
 	stateSourceObject.Load(1, &c.Timestamp)
@@ -1050,6 +1142,7 @@
 
 func (l *LinkPacketInfo) beforeSave() {}
 
+// +checklocksignore
 func (l *LinkPacketInfo) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.Protocol)
@@ -1058,6 +1151,7 @@
 
 func (l *LinkPacketInfo) afterLoad() {}
 
+// +checklocksignore
 func (l *LinkPacketInfo) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.Protocol)
 	stateSourceObject.Load(1, &l.PktType)
@@ -1076,6 +1170,7 @@
 
 func (l *LingerOption) beforeSave() {}
 
+// +checklocksignore
 func (l *LingerOption) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.Enabled)
@@ -1084,6 +1179,7 @@
 
 func (l *LingerOption) afterLoad() {}
 
+// +checklocksignore
 func (l *LingerOption) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.Enabled)
 	stateSourceObject.Load(1, &l.Timeout)
@@ -1103,6 +1199,7 @@
 
 func (i *IPPacketInfo) beforeSave() {}
 
+// +checklocksignore
 func (i *IPPacketInfo) StateSave(stateSinkObject state.Sink) {
 	i.beforeSave()
 	stateSinkObject.Save(0, &i.NIC)
@@ -1112,6 +1209,7 @@
 
 func (i *IPPacketInfo) afterLoad() {}
 
+// +checklocksignore
 func (i *IPPacketInfo) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &i.NIC)
 	stateSourceObject.Load(1, &i.LocalAddr)
diff --git a/pkg/tcpip/tcpip_unsafe_state_autogen.go b/pkg/tcpip/tcpip_unsafe_state_autogen.go
index 92ada71..387b5aa 100644
--- a/pkg/tcpip/tcpip_unsafe_state_autogen.go
+++ b/pkg/tcpip/tcpip_unsafe_state_autogen.go
@@ -19,12 +19,14 @@
 
 func (s *StdClock) beforeSave() {}
 
+// +checklocksignore
 func (s *StdClock) StateSave(stateSinkObject state.Sink) {
 	s.beforeSave()
 }
 
 func (s *StdClock) afterLoad() {}
 
+// +checklocksignore
 func (s *StdClock) StateLoad(stateSourceObject state.Source) {
 }
 
diff --git a/pkg/tcpip/transport/icmp/icmp_state_autogen.go b/pkg/tcpip/transport/icmp/icmp_state_autogen.go
index fe5af3d..4175f0f 100644
--- a/pkg/tcpip/transport/icmp/icmp_state_autogen.go
+++ b/pkg/tcpip/transport/icmp/icmp_state_autogen.go
@@ -22,6 +22,7 @@
 
 func (p *icmpPacket) beforeSave() {}
 
+// +checklocksignore
 func (p *icmpPacket) StateSave(stateSinkObject state.Sink) {
 	p.beforeSave()
 	var dataValue buffer.VectorisedView = p.saveData()
@@ -33,6 +34,7 @@
 
 func (p *icmpPacket) afterLoad() {}
 
+// +checklocksignore
 func (p *icmpPacket) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &p.icmpPacketEntry)
 	stateSourceObject.Load(1, &p.senderAddress)
@@ -63,6 +65,7 @@
 	}
 }
 
+// +checklocksignore
 func (e *endpoint) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	var rcvBufSizeMaxValue int = e.saveRcvBufSizeMax()
@@ -82,6 +85,7 @@
 	stateSinkObject.Save(13, &e.ops)
 }
 
+// +checklocksignore
 func (e *endpoint) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.TransportEndpointInfo)
 	stateSourceObject.Load(1, &e.DefaultSocketOptionsHandler)
@@ -113,6 +117,7 @@
 
 func (l *icmpPacketList) beforeSave() {}
 
+// +checklocksignore
 func (l *icmpPacketList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -121,6 +126,7 @@
 
 func (l *icmpPacketList) afterLoad() {}
 
+// +checklocksignore
 func (l *icmpPacketList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -139,6 +145,7 @@
 
 func (e *icmpPacketEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *icmpPacketEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -147,6 +154,7 @@
 
 func (e *icmpPacketEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *icmpPacketEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/tcpip/transport/packet/packet_state_autogen.go b/pkg/tcpip/transport/packet/packet_state_autogen.go
index e784275..f8b82e5 100644
--- a/pkg/tcpip/transport/packet/packet_state_autogen.go
+++ b/pkg/tcpip/transport/packet/packet_state_autogen.go
@@ -23,6 +23,7 @@
 
 func (p *packet) beforeSave() {}
 
+// +checklocksignore
 func (p *packet) StateSave(stateSinkObject state.Sink) {
 	p.beforeSave()
 	var dataValue buffer.VectorisedView = p.saveData()
@@ -35,6 +36,7 @@
 
 func (p *packet) afterLoad() {}
 
+// +checklocksignore
 func (p *packet) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &p.packetEntry)
 	stateSourceObject.Load(2, &p.timestampNS)
@@ -66,6 +68,7 @@
 	}
 }
 
+// +checklocksignore
 func (ep *endpoint) StateSave(stateSinkObject state.Sink) {
 	ep.beforeSave()
 	var rcvBufSizeMaxValue int = ep.saveRcvBufSizeMax()
@@ -85,6 +88,7 @@
 	stateSinkObject.Save(13, &ep.ops)
 }
 
+// +checklocksignore
 func (ep *endpoint) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &ep.TransportEndpointInfo)
 	stateSourceObject.Load(1, &ep.DefaultSocketOptionsHandler)
@@ -116,6 +120,7 @@
 
 func (l *packetList) beforeSave() {}
 
+// +checklocksignore
 func (l *packetList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -124,6 +129,7 @@
 
 func (l *packetList) afterLoad() {}
 
+// +checklocksignore
 func (l *packetList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -142,6 +148,7 @@
 
 func (e *packetEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *packetEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -150,6 +157,7 @@
 
 func (e *packetEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *packetEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/tcpip/transport/raw/raw_state_autogen.go b/pkg/tcpip/transport/raw/raw_state_autogen.go
index db4b393..3bcfc7c 100644
--- a/pkg/tcpip/transport/raw/raw_state_autogen.go
+++ b/pkg/tcpip/transport/raw/raw_state_autogen.go
@@ -22,6 +22,7 @@
 
 func (p *rawPacket) beforeSave() {}
 
+// +checklocksignore
 func (p *rawPacket) StateSave(stateSinkObject state.Sink) {
 	p.beforeSave()
 	var dataValue buffer.VectorisedView = p.saveData()
@@ -33,6 +34,7 @@
 
 func (p *rawPacket) afterLoad() {}
 
+// +checklocksignore
 func (p *rawPacket) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &p.rawPacketEntry)
 	stateSourceObject.Load(2, &p.timestampNS)
@@ -62,6 +64,7 @@
 	}
 }
 
+// +checklocksignore
 func (e *endpoint) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	var rcvBufSizeMaxValue int = e.saveRcvBufSizeMax()
@@ -80,6 +83,7 @@
 	stateSinkObject.Save(12, &e.ops)
 }
 
+// +checklocksignore
 func (e *endpoint) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.TransportEndpointInfo)
 	stateSourceObject.Load(1, &e.DefaultSocketOptionsHandler)
@@ -110,6 +114,7 @@
 
 func (l *rawPacketList) beforeSave() {}
 
+// +checklocksignore
 func (l *rawPacketList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -118,6 +123,7 @@
 
 func (l *rawPacketList) afterLoad() {}
 
+// +checklocksignore
 func (l *rawPacketList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -136,6 +142,7 @@
 
 func (e *rawPacketEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *rawPacketEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -144,6 +151,7 @@
 
 func (e *rawPacketEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *rawPacketEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/tcpip/transport/tcp/tcp_state_autogen.go b/pkg/tcpip/transport/tcp/tcp_state_autogen.go
index 4f3f62b..a92bec6 100644
--- a/pkg/tcpip/transport/tcp/tcp_state_autogen.go
+++ b/pkg/tcpip/transport/tcp/tcp_state_autogen.go
@@ -28,6 +28,7 @@
 
 func (c *cubicState) beforeSave() {}
 
+// +checklocksignore
 func (c *cubicState) StateSave(stateSinkObject state.Sink) {
 	c.beforeSave()
 	var tValue unixTime = c.saveT()
@@ -45,6 +46,7 @@
 
 func (c *cubicState) afterLoad() {}
 
+// +checklocksignore
 func (c *cubicState) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &c.wLastMax)
 	stateSourceObject.Load(1, &c.wMax)
@@ -71,6 +73,7 @@
 
 func (s *SACKInfo) beforeSave() {}
 
+// +checklocksignore
 func (s *SACKInfo) StateSave(stateSinkObject state.Sink) {
 	s.beforeSave()
 	stateSinkObject.Save(0, &s.Blocks)
@@ -79,6 +82,7 @@
 
 func (s *SACKInfo) afterLoad() {}
 
+// +checklocksignore
 func (s *SACKInfo) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &s.Blocks)
 	stateSourceObject.Load(1, &s.NumBlocks)
@@ -102,6 +106,7 @@
 
 func (r *rcvBufAutoTuneParams) beforeSave() {}
 
+// +checklocksignore
 func (r *rcvBufAutoTuneParams) StateSave(stateSinkObject state.Sink) {
 	r.beforeSave()
 	var measureTimeValue unixTime = r.saveMeasureTime()
@@ -117,6 +122,7 @@
 
 func (r *rcvBufAutoTuneParams) afterLoad() {}
 
+// +checklocksignore
 func (r *rcvBufAutoTuneParams) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(1, &r.copied)
 	stateSourceObject.Load(2, &r.prevCopied)
@@ -139,6 +145,7 @@
 
 func (e *EndpointInfo) beforeSave() {}
 
+// +checklocksignore
 func (e *EndpointInfo) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.TransportEndpointInfo)
@@ -146,6 +153,7 @@
 
 func (e *EndpointInfo) afterLoad() {}
 
+// +checklocksignore
 func (e *EndpointInfo) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.TransportEndpointInfo)
 }
@@ -221,6 +229,7 @@
 	}
 }
 
+// +checklocksignore
 func (e *endpoint) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	var stateValue EndpointState = e.saveState()
@@ -291,6 +300,7 @@
 	stateSinkObject.Save(60, &e.ops)
 }
 
+// +checklocksignore
 func (e *endpoint) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.EndpointInfo)
 	stateSourceObject.Load(1, &e.DefaultSocketOptionsHandler)
@@ -372,6 +382,7 @@
 
 func (k *keepalive) beforeSave() {}
 
+// +checklocksignore
 func (k *keepalive) StateSave(stateSinkObject state.Sink) {
 	k.beforeSave()
 	stateSinkObject.Save(0, &k.idle)
@@ -382,6 +393,7 @@
 
 func (k *keepalive) afterLoad() {}
 
+// +checklocksignore
 func (k *keepalive) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &k.idle)
 	stateSourceObject.Load(1, &k.interval)
@@ -415,6 +427,7 @@
 
 func (rc *rackControl) beforeSave() {}
 
+// +checklocksignore
 func (rc *rackControl) StateSave(stateSinkObject state.Sink) {
 	rc.beforeSave()
 	var xmitTimeValue unixTime = rc.saveXmitTime()
@@ -437,6 +450,7 @@
 
 func (rc *rackControl) afterLoad() {}
 
+// +checklocksignore
 func (rc *rackControl) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &rc.dsackSeen)
 	stateSourceObject.Load(1, &rc.endSequence)
@@ -477,6 +491,7 @@
 
 func (r *receiver) beforeSave() {}
 
+// +checklocksignore
 func (r *receiver) StateSave(stateSinkObject state.Sink) {
 	r.beforeSave()
 	var lastRcvdAckTimeValue unixTime = r.saveLastRcvdAckTime()
@@ -495,6 +510,7 @@
 
 func (r *receiver) afterLoad() {}
 
+// +checklocksignore
 func (r *receiver) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &r.ep)
 	stateSourceObject.Load(1, &r.rcvNxt)
@@ -521,6 +537,7 @@
 
 func (r *renoState) beforeSave() {}
 
+// +checklocksignore
 func (r *renoState) StateSave(stateSinkObject state.Sink) {
 	r.beforeSave()
 	stateSinkObject.Save(0, &r.s)
@@ -528,6 +545,7 @@
 
 func (r *renoState) afterLoad() {}
 
+// +checklocksignore
 func (r *renoState) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &r.s)
 }
@@ -544,6 +562,7 @@
 
 func (rr *renoRecovery) beforeSave() {}
 
+// +checklocksignore
 func (rr *renoRecovery) StateSave(stateSinkObject state.Sink) {
 	rr.beforeSave()
 	stateSinkObject.Save(0, &rr.s)
@@ -551,6 +570,7 @@
 
 func (rr *renoRecovery) afterLoad() {}
 
+// +checklocksignore
 func (rr *renoRecovery) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &rr.s)
 }
@@ -567,6 +587,7 @@
 
 func (sr *sackRecovery) beforeSave() {}
 
+// +checklocksignore
 func (sr *sackRecovery) StateSave(stateSinkObject state.Sink) {
 	sr.beforeSave()
 	stateSinkObject.Save(0, &sr.s)
@@ -574,6 +595,7 @@
 
 func (sr *sackRecovery) afterLoad() {}
 
+// +checklocksignore
 func (sr *sackRecovery) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &sr.s)
 }
@@ -591,6 +613,7 @@
 
 func (s *SACKScoreboard) beforeSave() {}
 
+// +checklocksignore
 func (s *SACKScoreboard) StateSave(stateSinkObject state.Sink) {
 	s.beforeSave()
 	stateSinkObject.Save(0, &s.smss)
@@ -599,6 +622,7 @@
 
 func (s *SACKScoreboard) afterLoad() {}
 
+// +checklocksignore
 func (s *SACKScoreboard) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &s.smss)
 	stateSourceObject.Load(1, &s.maxSACKED)
@@ -640,6 +664,7 @@
 
 func (s *segment) beforeSave() {}
 
+// +checklocksignore
 func (s *segment) StateSave(stateSinkObject state.Sink) {
 	s.beforeSave()
 	var dataValue buffer.VectorisedView = s.saveData()
@@ -675,6 +700,7 @@
 
 func (s *segment) afterLoad() {}
 
+// +checklocksignore
 func (s *segment) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &s.segmentEntry)
 	stateSourceObject.Load(1, &s.refCnt)
@@ -717,6 +743,7 @@
 
 func (q *segmentQueue) beforeSave() {}
 
+// +checklocksignore
 func (q *segmentQueue) StateSave(stateSinkObject state.Sink) {
 	q.beforeSave()
 	stateSinkObject.Save(0, &q.list)
@@ -726,6 +753,7 @@
 
 func (q *segmentQueue) afterLoad() {}
 
+// +checklocksignore
 func (q *segmentQueue) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.LoadWait(0, &q.list)
 	stateSourceObject.Load(1, &q.ep)
@@ -774,6 +802,7 @@
 
 func (s *sender) beforeSave() {}
 
+// +checklocksignore
 func (s *sender) StateSave(stateSinkObject state.Sink) {
 	s.beforeSave()
 	var lastSendTimeValue unixTime = s.saveLastSendTime()
@@ -812,6 +841,7 @@
 	stateSinkObject.Save(30, &s.rc)
 }
 
+// +checklocksignore
 func (s *sender) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &s.ep)
 	stateSourceObject.Load(2, &s.dupAckCount)
@@ -861,6 +891,7 @@
 
 func (r *rtt) beforeSave() {}
 
+// +checklocksignore
 func (r *rtt) StateSave(stateSinkObject state.Sink) {
 	r.beforeSave()
 	stateSinkObject.Save(0, &r.srtt)
@@ -870,6 +901,7 @@
 
 func (r *rtt) afterLoad() {}
 
+// +checklocksignore
 func (r *rtt) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &r.srtt)
 	stateSourceObject.Load(1, &r.rttvar)
@@ -893,6 +925,7 @@
 
 func (f *fastRecovery) beforeSave() {}
 
+// +checklocksignore
 func (f *fastRecovery) StateSave(stateSinkObject state.Sink) {
 	f.beforeSave()
 	stateSinkObject.Save(0, &f.active)
@@ -905,6 +938,7 @@
 
 func (f *fastRecovery) afterLoad() {}
 
+// +checklocksignore
 func (f *fastRecovery) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &f.active)
 	stateSourceObject.Load(1, &f.first)
@@ -927,6 +961,7 @@
 
 func (u *unixTime) beforeSave() {}
 
+// +checklocksignore
 func (u *unixTime) StateSave(stateSinkObject state.Sink) {
 	u.beforeSave()
 	stateSinkObject.Save(0, &u.second)
@@ -935,6 +970,7 @@
 
 func (u *unixTime) afterLoad() {}
 
+// +checklocksignore
 func (u *unixTime) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &u.second)
 	stateSourceObject.Load(1, &u.nano)
@@ -953,6 +989,7 @@
 
 func (l *endpointList) beforeSave() {}
 
+// +checklocksignore
 func (l *endpointList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -961,6 +998,7 @@
 
 func (l *endpointList) afterLoad() {}
 
+// +checklocksignore
 func (l *endpointList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -979,6 +1017,7 @@
 
 func (e *endpointEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *endpointEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -987,6 +1026,7 @@
 
 func (e *endpointEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *endpointEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
@@ -1005,6 +1045,7 @@
 
 func (l *segmentList) beforeSave() {}
 
+// +checklocksignore
 func (l *segmentList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -1013,6 +1054,7 @@
 
 func (l *segmentList) afterLoad() {}
 
+// +checklocksignore
 func (l *segmentList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -1031,6 +1073,7 @@
 
 func (e *segmentEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *segmentEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -1039,6 +1082,7 @@
 
 func (e *segmentEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *segmentEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/tcpip/transport/udp/udp_state_autogen.go b/pkg/tcpip/transport/udp/udp_state_autogen.go
index 16900d0..5d7859a 100644
--- a/pkg/tcpip/transport/udp/udp_state_autogen.go
+++ b/pkg/tcpip/transport/udp/udp_state_autogen.go
@@ -25,6 +25,7 @@
 
 func (u *udpPacket) beforeSave() {}
 
+// +checklocksignore
 func (u *udpPacket) StateSave(stateSinkObject state.Sink) {
 	u.beforeSave()
 	var dataValue buffer.VectorisedView = u.saveData()
@@ -39,6 +40,7 @@
 
 func (u *udpPacket) afterLoad() {}
 
+// +checklocksignore
 func (u *udpPacket) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &u.udpPacketEntry)
 	stateSourceObject.Load(1, &u.senderAddress)
@@ -83,6 +85,7 @@
 	}
 }
 
+// +checklocksignore
 func (e *endpoint) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	var rcvBufSizeMaxValue int = e.saveRcvBufSizeMax()
@@ -113,6 +116,7 @@
 	stateSinkObject.Save(24, &e.ops)
 }
 
+// +checklocksignore
 func (e *endpoint) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.TransportEndpointInfo)
 	stateSourceObject.Load(1, &e.DefaultSocketOptionsHandler)
@@ -155,6 +159,7 @@
 
 func (m *multicastMembership) beforeSave() {}
 
+// +checklocksignore
 func (m *multicastMembership) StateSave(stateSinkObject state.Sink) {
 	m.beforeSave()
 	stateSinkObject.Save(0, &m.nicID)
@@ -163,6 +168,7 @@
 
 func (m *multicastMembership) afterLoad() {}
 
+// +checklocksignore
 func (m *multicastMembership) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &m.nicID)
 	stateSourceObject.Load(1, &m.multicastAddr)
@@ -181,6 +187,7 @@
 
 func (l *udpPacketList) beforeSave() {}
 
+// +checklocksignore
 func (l *udpPacketList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -189,6 +196,7 @@
 
 func (l *udpPacketList) afterLoad() {}
 
+// +checklocksignore
 func (l *udpPacketList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -207,6 +215,7 @@
 
 func (e *udpPacketEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *udpPacketEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -215,6 +224,7 @@
 
 func (e *udpPacketEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *udpPacketEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
diff --git a/pkg/waiter/waiter_state_autogen.go b/pkg/waiter/waiter_state_autogen.go
index e128733..498b7e7 100644
--- a/pkg/waiter/waiter_state_autogen.go
+++ b/pkg/waiter/waiter_state_autogen.go
@@ -20,6 +20,7 @@
 
 func (e *Entry) beforeSave() {}
 
+// +checklocksignore
 func (e *Entry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.Callback)
@@ -29,6 +30,7 @@
 
 func (e *Entry) afterLoad() {}
 
+// +checklocksignore
 func (e *Entry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.Callback)
 	stateSourceObject.Load(1, &e.mask)
@@ -47,6 +49,7 @@
 
 func (q *Queue) beforeSave() {}
 
+// +checklocksignore
 func (q *Queue) StateSave(stateSinkObject state.Sink) {
 	q.beforeSave()
 	stateSinkObject.Save(0, &q.list)
@@ -54,6 +57,7 @@
 
 func (q *Queue) afterLoad() {}
 
+// +checklocksignore
 func (q *Queue) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &q.list)
 }
@@ -71,6 +75,7 @@
 
 func (l *waiterList) beforeSave() {}
 
+// +checklocksignore
 func (l *waiterList) StateSave(stateSinkObject state.Sink) {
 	l.beforeSave()
 	stateSinkObject.Save(0, &l.head)
@@ -79,6 +84,7 @@
 
 func (l *waiterList) afterLoad() {}
 
+// +checklocksignore
 func (l *waiterList) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &l.head)
 	stateSourceObject.Load(1, &l.tail)
@@ -97,6 +103,7 @@
 
 func (e *waiterEntry) beforeSave() {}
 
+// +checklocksignore
 func (e *waiterEntry) StateSave(stateSinkObject state.Sink) {
 	e.beforeSave()
 	stateSinkObject.Save(0, &e.next)
@@ -105,6 +112,7 @@
 
 func (e *waiterEntry) afterLoad() {}
 
+// +checklocksignore
 func (e *waiterEntry) StateLoad(stateSourceObject state.Source) {
 	stateSourceObject.Load(0, &e.next)
 	stateSourceObject.Load(1, &e.prev)
