|
|
@@ -1,7 +1,12 @@ |
|
|
|
package socketwrap |
|
|
|
|
|
|
|
import ( |
|
|
|
"os" |
|
|
|
"os/signal" |
|
|
|
"syscall" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/models" |
|
|
|
"code.gitea.io/gitea/modules/log" |
|
|
|
) |
|
|
|
|
|
|
|
type ClientsManager struct { |
|
|
@@ -22,6 +27,9 @@ var LastActionsQueue = NewSyncQueue(20) |
|
|
|
|
|
|
|
func (h *ClientsManager) Run() { |
|
|
|
initActionQueue() |
|
|
|
sig := make(chan os.Signal, 1) |
|
|
|
signal.Notify(sig, os.Interrupt, syscall.SIGTERM) |
|
|
|
var signalsReceived uint |
|
|
|
for { |
|
|
|
select { |
|
|
|
case client := <-h.Register: |
|
|
@@ -41,7 +49,17 @@ func (h *ClientsManager) Run() { |
|
|
|
delete(h.Clients, client) |
|
|
|
} |
|
|
|
} |
|
|
|
case s := <-sig: |
|
|
|
log.Info("received signal", s) |
|
|
|
signalsReceived++ |
|
|
|
if signalsReceived < 2 { |
|
|
|
for client, _ := range h.Clients { |
|
|
|
delete(h.Clients, client) |
|
|
|
client.Close() |
|
|
|
} |
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|