mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-27 00:23:41 +09:00 
			
		
		
		
	This PR registers requests with the process manager and manages hierarchy within the processes. Git repos are then associated with a context, (usually the request's context) - with sub commands using this context as their base context. Signed-off-by: Andrew Thornton <art27@cantab.net>
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2021 The Gitea Authors. All rights reserved.
 | |
| // Use of this source code is governed by a MIT-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| package process
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"sync"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // Process represents a working process inheriting from Gitea.
 | |
| type Process struct {
 | |
| 	PID         IDType // Process ID, not system one.
 | |
| 	ParentPID   IDType
 | |
| 	Description string
 | |
| 	Start       time.Time
 | |
| 	Cancel      context.CancelFunc
 | |
| 
 | |
| 	lock     sync.Mutex
 | |
| 	children []*Process
 | |
| }
 | |
| 
 | |
| // Children gets the children of the process
 | |
| // Note: this function will behave nicely even if p is nil
 | |
| func (p *Process) Children() (children []*Process) {
 | |
| 	if p == nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	p.lock.Lock()
 | |
| 	defer p.lock.Unlock()
 | |
| 	children = make([]*Process, len(p.children))
 | |
| 	copy(children, p.children)
 | |
| 	return children
 | |
| }
 | |
| 
 | |
| // AddChild adds a child process
 | |
| // Note: this function will behave nicely even if p is nil
 | |
| func (p *Process) AddChild(child *Process) {
 | |
| 	if p == nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	p.lock.Lock()
 | |
| 	defer p.lock.Unlock()
 | |
| 	p.children = append(p.children, child)
 | |
| }
 | |
| 
 | |
| // RemoveChild removes a child process
 | |
| // Note: this function will behave nicely even if p is nil
 | |
| func (p *Process) RemoveChild(process *Process) {
 | |
| 	if p == nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	p.lock.Lock()
 | |
| 	defer p.lock.Unlock()
 | |
| 	for i, child := range p.children {
 | |
| 		if child == process {
 | |
| 			p.children = append(p.children[:i], p.children[i+1:]...)
 | |
| 			return
 | |
| 		}
 | |
| 	}
 | |
| }
 |