| 
									
										
										
										
											2022-01-03 17:37:09 +01:00
										 |  |  | package runners | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-08 19:49:45 +02:00
										 |  |  | // closedctx is an always closed context. | 
					
						
							|  |  |  | var closedctx = func() context.Context { | 
					
						
							|  |  |  | 	ctx := make(cancelctx) | 
					
						
							|  |  |  | 	close(ctx) | 
					
						
							|  |  |  | 	return ctx | 
					
						
							|  |  |  | }() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-03 17:37:09 +01:00
										 |  |  | // ContextWithCancel returns a new context.Context impl with cancel. | 
					
						
							|  |  |  | func ContextWithCancel() (context.Context, context.CancelFunc) { | 
					
						
							|  |  |  | 	ctx := make(cancelctx) | 
					
						
							|  |  |  | 	return ctx, func() { close(ctx) } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // cancelctx is the simplest possible cancellable context. | 
					
						
							|  |  |  | type cancelctx (chan struct{}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (cancelctx) Deadline() (time.Time, bool) { | 
					
						
							|  |  |  | 	return time.Time{}, false | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (ctx cancelctx) Done() <-chan struct{} { | 
					
						
							|  |  |  | 	return ctx | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (ctx cancelctx) Err() error { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-ctx: | 
					
						
							|  |  |  | 		return context.Canceled | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (cancelctx) Value(key interface{}) interface{} { | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |