Pass context to kernel.TaskImage.release().

PiperOrigin-RevId: 543541608
This commit is contained in:
Jamie Liu
2023-06-26 14:28:58 -07:00
committed by gVisor bot
parent 94bf4b6469
commit f517b70ded
4 changed files with 7 additions and 7 deletions
+1 -1
View File
@@ -147,7 +147,7 @@ func (t *Task) Clone(args *linux.CloneArgs) (ThreadID, *SyscallControl, error) {
return 0, nil, err
}
cu.Add(func() {
image.release()
image.release(t)
})
// clone() returns 0 in the child.
image.Arch.SetReturn(0)
+3 -3
View File
@@ -94,7 +94,7 @@ func (*execStop) Killable() bool { return true }
// goroutine.
func (t *Task) Execve(newImage *TaskImage, argv, env []string, executable *vfs.FileDescription, pathname string) (*SyscallControl, error) {
cu := cleanup.Make(func() {
newImage.release()
newImage.release(t)
})
defer cu.Clean()
// We can't clearly hold kernel package locks while stat'ing executable.
@@ -154,7 +154,7 @@ func (r *runSyscallAfterExecStop) execute(t *Task) taskRunState {
t.tg.execing = nil
if t.killed() {
t.tg.pidns.owner.mu.Unlock()
r.image.release()
r.image.release(t)
return (*runInterrupt)(nil)
}
// We are the thread group leader now. Save our old thread ID for
@@ -248,7 +248,7 @@ func (r *runSyscallAfterExecStop) execute(t *Task) taskRunState {
// Don't hold t.mu while calling t.image.release(), that may
// attempt to acquire TaskImage.MemoryManager.mappingMu, a lock order
// violation.
oldImage.release()
oldImage.release(t)
t.unstopVforkParent()
t.p.FullStateChanged()
+2 -2
View File
@@ -54,11 +54,11 @@ type TaskImage struct {
// release releases all resources held by the TaskImage. release is called by
// the task when it execs into a new TaskImage.
func (image *TaskImage) release() {
func (image *TaskImage) release(ctx context.Context) {
// Nil out pointers so that if the task is saved after release, it doesn't
// follow the pointers to possibly now-invalid objects.
if image.MemoryManager != nil {
image.MemoryManager.DecUsers(context.Background())
image.MemoryManager.DecUsers(ctx)
image.MemoryManager = nil
}
image.fu = nil
+1 -1
View File
@@ -113,7 +113,7 @@ type TaskConfig struct {
func (ts *TaskSet) NewTask(ctx context.Context, cfg *TaskConfig) (*Task, error) {
var err error
cleanup := func() {
cfg.TaskImage.release()
cfg.TaskImage.release(ctx)
cfg.FSContext.DecRef(ctx)
cfg.FDTable.DecRef(ctx)
cfg.IPCNamespace.DecRef(ctx)