Skip to content

Commit 2b6ea20

Browse files
chore: use thread safe fifo stack
1 parent b8df841 commit 2b6ea20

3 files changed

Lines changed: 38 additions & 3 deletions

File tree

app-server/dockercontroller.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ import (
1717
)
1818

1919
const pullDelay = 1 * time.Minute
20-
var display int=99
20+
var displayStack = &TF_FIFOStack{}
2121

2222
//Ens permet arrancar docker de forma asyncrona
2323
func StartDockerImage(imageName string, port string, volume string, close chan struct{}){
24-
log.Println("Inicialitzant el contenidor (D:",display," P:",port,")...")
24+
display := displayStack.Pop()
25+
defer displayStack.Push(display)
26+
log.Println("Inicialitzant el contenidor (D:",display," P:",port,")...")
2527
//Obté docker API
2628
dockerCli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
2729
if err != nil {
@@ -60,7 +62,6 @@ func StartDockerImage(imageName string, port string, volume string, close chan s
6062
log.Println("Error en crear el contenidor de la imatge de docker", err)
6163
return
6264
}
63-
display = display+1
6465

6566
// Inicia el contenidor
6667
if err := dockerCli.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{}); err != nil {

app-server/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func Initialize(){
3131
KeepAlive()
3232
InitializeVolumes()
3333
UpdateImages()
34+
fillStack(displayStack)
3435
}
3536

3637
func RedirectHandler(w http.ResponseWriter, r *http.Request) {

app-server/tf-fifo-stack.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package main
2+
3+
import (
4+
"sync"
5+
)
6+
7+
type TF_FIFOStack struct {
8+
lock sync.Mutex
9+
stack []int
10+
}
11+
12+
func (s *TF_FIFOStack) Push(x int) {
13+
s.lock.Lock()
14+
defer s.lock.Unlock()
15+
s.stack = append(s.stack, x)
16+
}
17+
18+
func (s *TF_FIFOStack) Pop() (int) {
19+
s.lock.Lock()
20+
defer s.lock.Unlock()
21+
if len(s.stack) == 0 {
22+
return 0
23+
}
24+
x := s.stack[0]
25+
s.stack = s.stack[1:]
26+
return x
27+
}
28+
29+
func fillStack(s *TF_FIFOStack){
30+
for i := 100; i <= 10000; i++ {
31+
s.Push(i)
32+
}
33+
}

0 commit comments

Comments
 (0)