------------------------------------------ implement link node ------------------------------------------ newLinkBufferNode create or reuse linkBufferNode. Nodes with size <= 0 are marked as readonly, which means the node.buf is not allocated by this mcache.
(size int)
| 840 | // newLinkBufferNode create or reuse linkBufferNode. |
| 841 | // Nodes with size <= 0 are marked as readonly, which means the node.buf is not allocated by this mcache. |
| 842 | func newLinkBufferNode(size int) *linkBufferNode { |
| 843 | node := linkedPool.Get().(*linkBufferNode) |
| 844 | // reset node offset |
| 845 | node.off, node.malloc, node.refer, node.mode = 0, 0, 1, defaultLinkBufferMode |
| 846 | if size <= 0 { |
| 847 | node.setFlag(flagUnmanaged) |
| 848 | return node |
| 849 | } |
| 850 | if size < LinkBufferCap { |
| 851 | size = LinkBufferCap |
| 852 | } |
| 853 | node.buf = malloc(0, size) |
| 854 | return node |
| 855 | } |
| 856 | |
| 857 | var linkedPool = sync.Pool{ |
| 858 | New: func() interface{} { |
searching dependent graphs…