mobile: Move lndStarted check to the top of the Start function

This commit is contained in:
Hampus Sjöberg 2021-04-15 11:44:38 +02:00
parent 5c5b91216a
commit e1ebdb311a

@ -31,6 +31,15 @@ var lndStarted int32
// current app directory in order to ensure lnd has the permissions needed to // current app directory in order to ensure lnd has the permissions needed to
// write to it. // write to it.
func Start(extraArgs string, rpcReady Callback) { func Start(extraArgs string, rpcReady Callback) {
// We only support a single lnd instance at a time (singleton) for now,
// so we make sure to return immediately if it has already been
// started.
if !atomic.CompareAndSwapInt32(&lndStarted, 0, 1) {
err := errors.New("lnd already started")
rpcReady.OnError(err)
return
}
// (Re-)initialize the in-mem gRPC listeners we're going to give to lnd. // (Re-)initialize the in-mem gRPC listeners we're going to give to lnd.
// This is required each time lnd is started, because when lnd shuts // This is required each time lnd is started, because when lnd shuts
// down, the in-mem listeners are closed. // down, the in-mem listeners are closed.
@ -58,6 +67,7 @@ func Start(extraArgs string, rpcReady Callback) {
// Hook interceptor for os signals. // Hook interceptor for os signals.
shutdownInterceptor, err := signal.Intercept() shutdownInterceptor, err := signal.Intercept()
if err != nil { if err != nil {
atomic.StoreInt32(&lndStarted, 0)
_, _ = fmt.Fprintln(os.Stderr, err) _, _ = fmt.Fprintln(os.Stderr, err)
rpcReady.OnError(err) rpcReady.OnError(err)
return return
@ -67,6 +77,7 @@ func Start(extraArgs string, rpcReady Callback) {
// line options. This function will also set up logging properly. // line options. This function will also set up logging properly.
loadedConfig, err := lnd.LoadConfig(shutdownInterceptor) loadedConfig, err := lnd.LoadConfig(shutdownInterceptor)
if err != nil { if err != nil {
atomic.StoreInt32(&lndStarted, 0)
_, _ = fmt.Fprintln(os.Stderr, err) _, _ = fmt.Fprintln(os.Stderr, err)
rpcReady.OnError(err) rpcReady.OnError(err)
return return
@ -88,15 +99,6 @@ func Start(extraArgs string, rpcReady Callback) {
}, },
} }
// We only support a single lnd instance at a time (singleton) for now,
// so we make sure to return immediately if it has already been
// started.
if !atomic.CompareAndSwapInt32(&lndStarted, 0, 1) {
err := errors.New("lnd already started")
rpcReady.OnError(err)
return
}
// Call the "real" main in a nested manner so the defers will properly // Call the "real" main in a nested manner so the defers will properly
// be executed in the case of a graceful shutdown. // be executed in the case of a graceful shutdown.
go func() { go func() {