mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
a1cb52447f
Checks in Task.block() and Task.Value() are conditional on race detection being enabled, since these functions are relatively hot. Checks in Task.SleepStart() and Task.UninterruptibleSleepStart() are enabled unconditionally, since these functions are not thought to lie on any critical paths, and misuse of these functions is required for b/168241471 to manifest. PiperOrigin-RevId: 342342175
34 lines
998 B
Go
34 lines
998 B
Go
// Copyright 2020 The gVisor Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package kernel
|
|
|
|
import (
|
|
"gvisor.dev/gvisor/pkg/context"
|
|
)
|
|
|
|
// AIOCallback is an function that does asynchronous I/O on behalf of a task.
|
|
type AIOCallback func(context.Context)
|
|
|
|
// QueueAIO queues an AIOCallback which will be run asynchronously.
|
|
func (t *Task) QueueAIO(cb AIOCallback) {
|
|
ctx := t.AsyncContext()
|
|
wg := &t.TaskSet().aioGoroutines
|
|
wg.Add(1)
|
|
go func() {
|
|
cb(ctx)
|
|
wg.Done()
|
|
}()
|
|
}
|