@ -155,6 +155,11 @@ static const char* DEFAULT_ASMAP_FILENAME="ip_asn.map";
* The PID file facilities .
*/
static const char * BITCOIN_PID_FILENAME = " bitcoind.pid " ;
/**
* True if this process has created a PID file .
* Used to determine whether we should remove the PID file on shutdown .
*/
static bool g_generated_pid { false } ;
static fs : : path GetPidFile ( const ArgsManager & args )
{
@ -170,12 +175,24 @@ static fs::path GetPidFile(const ArgsManager& args)
# else
tfm : : format ( file , " %d \n " , getpid ( ) ) ;
# endif
g_generated_pid = true ;
return true ;
} else {
return InitError ( strprintf ( _ ( " Unable to create the PID file '%s': %s " ) , fs : : PathToString ( GetPidFile ( args ) ) , SysErrorString ( errno ) ) ) ;
}
}
static void RemovePidFile ( const ArgsManager & args )
{
if ( ! g_generated_pid ) return ;
const auto pid_path { GetPidFile ( args ) } ;
if ( std : : error_code error ; ! fs : : remove ( pid_path , error ) ) {
std : : string msg { error ? error . message ( ) : " File does not exist " } ;
LogPrintf ( " Unable to remove PID file (%s): %s \n " , fs : : PathToString ( pid_path ) , msg ) ;
}
}
//////////////////////////////////////////////////////////////////////////////
//
// Shutdown
@ -352,13 +369,7 @@ void Shutdown(NodeContext& node)
node . scheduler . reset ( ) ;
node . kernel . reset ( ) ;
try {
if ( ! fs : : remove ( GetPidFile ( * node . args ) ) ) {
LogPrintf ( " %s: Unable to remove PID file: File does not exist \n " , __func__ ) ;
}
} catch ( const fs : : filesystem_error & e ) {
LogPrintf ( " %s: Unable to remove PID file: %s \n " , __func__ , fsbridge : : get_filesystem_error_message ( e ) ) ;
}
RemovePidFile ( * node . args ) ;
LogPrintf ( " %s: done \n " , __func__ ) ;
}