gitech

Форк
0
/
context.go 
68 строк · 1.6 Кб
1
// Copyright 2021 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
3

4
package process
5

6
import (
7
	"context"
8
)
9

10
// Context is a wrapper around context.Context and contains the current pid for this context
11
type Context struct {
12
	context.Context
13
	pid IDType
14
}
15

16
// GetPID returns the PID for this context
17
func (c *Context) GetPID() IDType {
18
	return c.pid
19
}
20

21
// GetParent returns the parent process context (if any)
22
func (c *Context) GetParent() *Context {
23
	return GetContext(c.Context)
24
}
25

26
// Value is part of the interface for context.Context. We mostly defer to the internal context - but we return this in response to the ProcessContextKey
27
func (c *Context) Value(key any) any {
28
	if key == ProcessContextKey {
29
		return c
30
	}
31
	return c.Context.Value(key)
32
}
33

34
// ProcessContextKey is the key under which process contexts are stored
35
var ProcessContextKey any = "process-context"
36

37
// GetContext will return a process context if one exists
38
func GetContext(ctx context.Context) *Context {
39
	if pCtx, ok := ctx.(*Context); ok {
40
		return pCtx
41
	}
42
	pCtxInterface := ctx.Value(ProcessContextKey)
43
	if pCtxInterface == nil {
44
		return nil
45
	}
46
	if pCtx, ok := pCtxInterface.(*Context); ok {
47
		return pCtx
48
	}
49
	return nil
50
}
51

52
// GetPID returns the PID for this context
53
func GetPID(ctx context.Context) IDType {
54
	pCtx := GetContext(ctx)
55
	if pCtx == nil {
56
		return ""
57
	}
58
	return pCtx.GetPID()
59
}
60

61
// GetParentPID returns the ParentPID for this context
62
func GetParentPID(ctx context.Context) IDType {
63
	var parentPID IDType
64
	if parentProcess := GetContext(ctx); parentProcess != nil {
65
		parentPID = parentProcess.GetPID()
66
	}
67
	return parentPID
68
}
69

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.