From a949133c4b22a87c79310b2d825f2899028d6088 Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Thu, 23 May 2019 23:20:11 -0700 Subject: gvisor: interrupt the sendfile system call if a task has been interrupted sendfile can be called for a big range and it can require significant amount of time to process it, so we need to handle task interrupts in this system call. PiperOrigin-RevId: 249781023 Change-Id: Ifc2ec505d74c06f5ee76f93b8d30d518ec2d4015 --- pkg/sentry/kernel/pipe/node_test.go | 4 ++++ pkg/sentry/kernel/task_block.go | 5 +++++ 2 files changed, 9 insertions(+) (limited to 'pkg/sentry/kernel') diff --git a/pkg/sentry/kernel/pipe/node_test.go b/pkg/sentry/kernel/pipe/node_test.go index 7ddecdad8..31d9b0443 100644 --- a/pkg/sentry/kernel/pipe/node_test.go +++ b/pkg/sentry/kernel/pipe/node_test.go @@ -48,6 +48,10 @@ func (s *sleeper) Cancel() { s.ch <- struct{}{} } +func (s *sleeper) Interrupted() bool { + return len(s.ch) != 0 +} + type openResult struct { *fs.File error diff --git a/pkg/sentry/kernel/task_block.go b/pkg/sentry/kernel/task_block.go index 30a7f6b1e..1c76c4d84 100644 --- a/pkg/sentry/kernel/task_block.go +++ b/pkg/sentry/kernel/task_block.go @@ -158,6 +158,11 @@ func (t *Task) SleepFinish(success bool) { t.Activate() } +// Interrupted implements amutex.Sleeper.Interrupted +func (t *Task) Interrupted() bool { + return len(t.interruptChan) != 0 +} + // UninterruptibleSleepStart implements context.Context.UninterruptibleSleepStart. func (t *Task) UninterruptibleSleepStart(deactivate bool) { if deactivate { -- cgit v1.2.3