1
0
mirror of https://github.com/amir20/dozzle.git synced 2025-12-24 06:28:42 +01:00

fix: fixes race issues (#2747)

This commit is contained in:
Amir Raminfar
2024-02-02 13:56:48 -08:00
committed by GitHub
parent b8869784d4
commit fc8b67a902
6 changed files with 56 additions and 63 deletions

View File

@@ -1,11 +1,15 @@
package utils
import "encoding/json"
import (
"encoding/json"
"sync"
)
type RingBuffer[T any] struct {
Size int
data []T
start int
mutex sync.RWMutex
}
func NewRingBuffer[T any](size int) *RingBuffer[T] {
@@ -16,6 +20,8 @@ func NewRingBuffer[T any](size int) *RingBuffer[T] {
}
func (r *RingBuffer[T]) Push(data T) {
r.mutex.Lock()
defer r.mutex.Unlock()
if len(r.data) == r.Size {
r.data[r.start] = data
r.start = (r.start + 1) % r.Size
@@ -25,6 +31,8 @@ func (r *RingBuffer[T]) Push(data T) {
}
func (r *RingBuffer[T]) Data() []T {
r.mutex.RLock()
defer r.mutex.RUnlock()
if len(r.data) == r.Size {
return append(r.data[r.start:], r.data[:r.start]...)
} else {
@@ -32,14 +40,6 @@ func (r *RingBuffer[T]) Data() []T {
}
}
func (r *RingBuffer[T]) Len() int {
return len(r.data)
}
func (r *RingBuffer[T]) Full() bool {
return len(r.data) == r.Size
}
func (r *RingBuffer[T]) MarshalJSON() ([]byte, error) {
return json.Marshal(r.Data())
}