func (w *gcWork) putBatch(obj []uintptr) {
	if len(obj) == 0 {
		return
	}

	flushed := false
	wbuf := w.wbuf1
	if wbuf == nil {
		w.init()
		wbuf = w.wbuf1
	}

	for len(obj) > 0 {
		for wbuf.nobj == len(wbuf.obj) {
			putfull(wbuf)
			w.flushedWork = true
			w.wbuf1, w.wbuf2 = w.wbuf2, getempty()
			wbuf = w.wbuf1
			flushed = true
		}
		n := copy(wbuf.obj[wbuf.nobj:], obj)
		wbuf.nobj += n
		obj = obj[n:]
	}

	if flushed && gcphase == _GCmark {
		gcController.enlistWorker()
	}
}
// putBatch performs a put on every pointer in obj. See put for
// constraints on these pointers.
//
//go:nowritebarrierrec
putBatch performs a put on every pointer in obj. See put for
constraints on these pointers.

nowritebarrierrec
// putBatch performs a put on every pointer in obj . See put for // constraints on these pointers . // // go : nowritebarrierrec
func (w *gcWork) putBatch(obj []uintptr) {
	if len(obj) == 0 {
		return
	}
	flushed := false
	wbuf := w.wbuf1
	if wbuf == nil {
		w.init()
		wbuf = w.wbuf1
	}
	for len(obj) > 0 {
		for wbuf.nobj == len(wbuf.obj) {
			putfull(wbuf)
			w.flushedWork = true
			w.wbuf1, w.wbuf2 = w.wbuf2, getempty()
			wbuf = w.wbuf1
			flushed = true
		}
		n := copy(wbuf.obj[wbuf.nobj:], obj)
		wbuf.nobj += n
		obj = obj[n:]
	}
	if flushed && gcphase == _GCmark {
		gcController.enlistWorker()
	}
}
func ( w * gcWork ) putBatch ( obj [ ] uintptr ) { if len ( obj ) == 0 { return } flushed := false wbuf := w . wbuf1 if wbuf == nil { w . init ( ) wbuf = w . wbuf1 } for len ( obj ) > 0 { for wbuf . nobj == len ( wbuf . obj ) { putfull ( wbuf ) w . flushedWork = true w . wbuf1 , w . wbuf2 = w . wbuf2 , getempty ( ) wbuf = w . wbuf1 flushed = true } n := copy ( wbuf . obj [ wbuf . nobj : ] , obj ) wbuf . nobj += n obj = obj [ n : ] } if flushed && gcphase == _GCmark { gcController . enlistWorker ( ) } }
putBatch performs a put on every pointer in obj.
putBatch performs a put on every pointer in obj .