@@ -1044,59 +1044,45 @@ static void parse_getnetworkinfo_result(struct plugin *p, const char *buf)
1044
1044
1045
1045
static void wait_and_check_bitcoind (struct plugin * p )
1046
1046
{
1047
- int in , from , status , ret ;
1047
+ int in , from , status ;
1048
1048
pid_t child ;
1049
- const char * * cmd = gather_args (bitcoind , "getnetworkinfo" , NULL );
1050
- bool printed = false ;
1049
+ const char * * cmd = gather_args (
1050
+ bitcoind , "-rpcwait" , "-rpcwaittimeout=30" , "getnetworkinfo" , NULL ) ;
1051
1051
char * output = NULL ;
1052
1052
1053
- for (;;) {
1054
- tal_free (output );
1053
+ child = pipecmdarr (& in , & from , & from , cast_const2 (char * * , cmd ));
1055
1054
1056
- child = pipecmdarr (& in , & from , & from , cast_const2 (char * * , cmd ));
1055
+ if (bitcoind -> rpcpass )
1056
+ write_all (in , bitcoind -> rpcpass , strlen (bitcoind -> rpcpass ));
1057
1057
1058
- if (bitcoind -> rpcpass )
1059
- write_all (in , bitcoind -> rpcpass , strlen (bitcoind -> rpcpass ));
1058
+ close (in );
1060
1059
1061
- close (in );
1060
+ if (child < 0 ) {
1061
+ if (errno == ENOENT )
1062
+ bitcoind_failure (
1063
+ p ,
1064
+ "bitcoin-cli not found. Is bitcoin-cli "
1065
+ "(part of Bitcoin Core) available in your PATH?" );
1066
+ plugin_err (p , "%s exec failed: %s" , cmd [0 ], strerror (errno ));
1067
+ }
1062
1068
1063
- if (child < 0 ) {
1064
- if (errno == ENOENT )
1065
- bitcoind_failure (p , "bitcoin-cli not found. Is bitcoin-cli "
1066
- "(part of Bitcoin Core) available in your PATH?" );
1067
- plugin_err (p , "%s exec failed: %s" , cmd [0 ], strerror (errno ));
1068
- }
1069
+ output = grab_fd (cmd , from );
1069
1070
1070
- output = grab_fd (cmd , from );
1071
-
1072
- while ((ret = waitpid (child , & status , 0 )) < 0 && errno == EINTR );
1073
- if (ret != child )
1074
- bitcoind_failure (p , tal_fmt (bitcoind , "Waiting for %s: %s" ,
1075
- cmd [0 ], strerror (errno )));
1076
- if (!WIFEXITED (status ))
1077
- bitcoind_failure (p , tal_fmt (bitcoind , "Death of %s: signal %i" ,
1078
- cmd [0 ], WTERMSIG (status )));
1079
-
1080
- if (WEXITSTATUS (status ) == 0 )
1081
- break ;
1082
-
1083
- /* bitcoin/src/rpc/protocol.h:
1084
- * RPC_IN_WARMUP = -28, //!< Client still warming up
1085
- */
1086
- if (WEXITSTATUS (status ) != 28 ) {
1087
- if (WEXITSTATUS (status ) == 1 )
1088
- bitcoind_failure (p , "Could not connect to bitcoind using"
1089
- " bitcoin-cli. Is bitcoind running?" );
1090
- bitcoind_failure (p , tal_fmt (bitcoind , "%s exited with code %i: %s" ,
1091
- cmd [0 ], WEXITSTATUS (status ), output ));
1092
- }
1071
+ waitpid (child , & status , 0 );
1093
1072
1094
- if (!printed ) {
1095
- plugin_log (p , LOG_UNUSUAL ,
1096
- "Waiting for bitcoind to warm up..." );
1097
- printed = true;
1098
- }
1099
- sleep (1 );
1073
+ if (!WIFEXITED (status ))
1074
+ bitcoind_failure (p , tal_fmt (bitcoind , "Death of %s: signal %i" ,
1075
+ cmd [0 ], WTERMSIG (status )));
1076
+
1077
+ if (WEXITSTATUS (status ) != 0 ) {
1078
+ if (WEXITSTATUS (status ) == 1 )
1079
+ bitcoind_failure (p ,
1080
+ "RPC connection timed out. Could "
1081
+ "not connect to bitcoind using "
1082
+ "bitcoin-cli. Is bitcoind running?" );
1083
+ bitcoind_failure (p ,
1084
+ tal_fmt (bitcoind , "%s exited with code %i: %s" ,
1085
+ cmd [0 ], WEXITSTATUS (status ), output ));
1100
1086
}
1101
1087
1102
1088
parse_getnetworkinfo_result (p , output );
0 commit comments