|
@@ -8,11 +8,11 @@ import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"sync"
|
|
"sync"
|
|
|
|
|
|
|
|
- . "gitp78su.ipnodns.ru/svi/kern/v2/kc/helpers"
|
|
|
|
|
- "gitp78su.ipnodns.ru/svi/kern/v2/kc/log_buf"
|
|
|
|
|
- "gitp78su.ipnodns.ru/svi/kern/v2/kc/safe_bool"
|
|
|
|
|
- . "gitp78su.ipnodns.ru/svi/kern/v2/krn/kalias"
|
|
|
|
|
- . "gitp78su.ipnodns.ru/svi/kern/v2/krn/ktypes"
|
|
|
|
|
|
|
+ . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
|
|
|
|
|
+ "gitp78su.ipnodns.ru/svi/kern/kc/log_buf"
|
|
|
|
|
+ "gitp78su.ipnodns.ru/svi/kern/kc/safe_bool"
|
|
|
|
|
+ . "gitp78su.ipnodns.ru/svi/kern/krn/kalias"
|
|
|
|
|
+ . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
// kernelWg -- именованный ожидатель потоков ядра
|
|
// kernelWg -- именованный ожидатель потоков ядра
|
|
@@ -42,7 +42,7 @@ func GetKernelWg(ctx context.Context) IKernelWg {
|
|
|
ctx: ctx,
|
|
ctx: ctx,
|
|
|
dictStream: map[AStreamName]bool{},
|
|
dictStream: map[AStreamName]bool{},
|
|
|
isWork: safe_bool.NewSafeBool(),
|
|
isWork: safe_bool.NewSafeBool(),
|
|
|
- log: log_buf.NewLogBuf(true),
|
|
|
|
|
|
|
+ log: log_buf.NewLogBuf(log_buf.OptIsTerm(true), log_buf.OptPrefix("kernelWg")),
|
|
|
}
|
|
}
|
|
|
sf.log.Debug("GetKernelWg(): run")
|
|
sf.log.Debug("GetKernelWg(): run")
|
|
|
go sf.close()
|
|
go sf.close()
|
|
@@ -84,7 +84,7 @@ func (sf *kernelWg) Done(name AStreamName) {
|
|
|
sf.Lock()
|
|
sf.Lock()
|
|
|
defer sf.Unlock()
|
|
defer sf.Unlock()
|
|
|
delete(sf.dictStream, name)
|
|
delete(sf.dictStream, name)
|
|
|
- sf.log.Debug("kernelWg.Done(): stream(%v) done", name)
|
|
|
|
|
|
|
+ sf.log.Debug("Done(): stream(%v) done", name)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Wait -- блокирующий вызов; возвращает управление, только когда все потоки завершили работу
|
|
// Wait -- блокирующий вызов; возвращает управление, только когда все потоки завершили работу
|
|
@@ -95,21 +95,21 @@ func (sf *kernelWg) Wait() {
|
|
|
break
|
|
break
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- sf.log.Debug("kernelWg.Wait(): done")
|
|
|
|
|
|
|
+ sf.log.Debug("Wait(): done")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Add -- добавляет поток в ожидание
|
|
// Add -- добавляет поток в ожидание
|
|
|
func (sf *kernelWg) Add(name AStreamName) Result[bool] {
|
|
func (sf *kernelWg) Add(name AStreamName) Result[bool] {
|
|
|
sf.Lock()
|
|
sf.Lock()
|
|
|
defer sf.Unlock()
|
|
defer sf.Unlock()
|
|
|
- sf.log.Debug("kernelWg.Add(): stream='%v'", name)
|
|
|
|
|
|
|
+ sf.log.Debug("Add(): stream='%v'", name)
|
|
|
if !sf.isWork.Get() {
|
|
if !sf.isWork.Get() {
|
|
|
- err := fmt.Errorf("kernelWg.Add(): stream=%v, work end", name)
|
|
|
|
|
|
|
+ err := fmt.Errorf("Add(): stream=%v, work end", name)
|
|
|
return NewErr[bool](err)
|
|
return NewErr[bool](err)
|
|
|
}
|
|
}
|
|
|
- Hassert(name != "", "kernelWg.Add(): name stream is empty")
|
|
|
|
|
|
|
+ Hassert(name != "", "Add(): name stream is empty")
|
|
|
_, isOk := sf.dictStream[name]
|
|
_, isOk := sf.dictStream[name]
|
|
|
- Hassert(!isOk, "kernelWg.Add(): stream '%v' already exists", name)
|
|
|
|
|
|
|
+ Hassert(!isOk, "Add(): stream '%v' already exists", name)
|
|
|
sf.dictStream[name] = true
|
|
sf.dictStream[name] = true
|
|
|
return NewOk(true)
|
|
return NewOk(true)
|
|
|
}
|
|
}
|
|
@@ -134,5 +134,5 @@ func (sf *kernelWg) close() {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
sf.isWork.Reset()
|
|
sf.isWork.Reset()
|
|
|
- sf.log.Debug("kernelWg.close(): end")
|
|
|
|
|
|
|
+ sf.log.Debug("close(): end")
|
|
|
}
|
|
}
|