forked from External/ergo
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:
parent
e112a78b9b
commit
ed75533cb1
20 changed files with 1048 additions and 0 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue