This repository has been archived on 2020-04-20. You can view files and clone it, but cannot push or open issues or pull requests.
2017-05-02 23:33:51 +00:00
|
|
|
package policies
|
|
|
|
|
|
|
|
import (
|
2018-06-08 21:54:31 +00:00
|
|
|
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
|
2017-05-02 23:33:51 +00:00
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TimeoutPolicy is a convieance interface for enforcing common timeout patterns
|
|
|
|
type TimeoutPolicy time.Duration
|
|
|
|
|
|
|
|
// Selection of common timeout policies
|
|
|
|
const (
|
|
|
|
UnknownPurposeTimeout TimeoutPolicy = TimeoutPolicy(15 * time.Second)
|
|
|
|
)
|
|
|
|
|
|
|
|
// ExecuteAction runs a function and returns an error if it hasn't returned
|
|
|
|
// by the time specified by TimeoutPolicy
|
|
|
|
func (tp *TimeoutPolicy) ExecuteAction(action func() error) error {
|
|
|
|
|
|
|
|
c := make(chan error)
|
|
|
|
go func() {
|
|
|
|
c <- action()
|
|
|
|
}()
|
|
|
|
|
|
|
|
tick := time.Tick(time.Duration(*tp))
|
|
|
|
select {
|
|
|
|
case <-tick:
|
|
|
|
return utils.ActionTimedOutError
|
|
|
|
case err := <-c:
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|