mirror of
https://github.com/jeremyd/ergo.git
synced 2026-04-26 15:40:00 -07:00
optionally protect against multiple starts with flock (#1873)
* optionally protect against multiple starts with flock Fixes #1823 * use traditional .lock extension * move config key to top level
This commit is contained in:
committed by
GitHub
parent
e112a78b9b
commit
ed75533cb1
@@ -25,6 +25,7 @@ import (
|
||||
"github.com/ergochat/ergo/irc/caps"
|
||||
"github.com/ergochat/ergo/irc/connection_limits"
|
||||
"github.com/ergochat/ergo/irc/flatip"
|
||||
"github.com/ergochat/ergo/irc/flock"
|
||||
"github.com/ergochat/ergo/irc/history"
|
||||
"github.com/ergochat/ergo/irc/logger"
|
||||
"github.com/ergochat/ergo/irc/modes"
|
||||
@@ -88,6 +89,7 @@ type Server struct {
|
||||
whoWas WhoWasList
|
||||
stats Stats
|
||||
semaphores ServerSemaphores
|
||||
flock flock.Flocker
|
||||
defcon uint32
|
||||
}
|
||||
|
||||
@@ -585,6 +587,19 @@ func (server *Server) applyConfig(config *Config) (err error) {
|
||||
|
||||
server.logger.Info("server", "Using config file", server.configFilename)
|
||||
|
||||
if initial {
|
||||
if config.LockFile != "" {
|
||||
server.flock, err = flock.TryAcquireFlock(config.LockFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to acquire flock on %s: %w",
|
||||
config.LockFile, err)
|
||||
}
|
||||
}
|
||||
// the lock is never released until quit; we need to save a pointer
|
||||
// to the (*flock.Flock) object so it doesn't get GC'ed, which would
|
||||
// close the file and surrender the lock
|
||||
}
|
||||
|
||||
// first, reload config sections for functionality implemented in subpackages:
|
||||
wasLoggingRawIO := !initial && server.logger.IsLoggingRawIO()
|
||||
err = server.logger.ApplyConfig(config.Logging)
|
||||
|
||||
Reference in New Issue
Block a user