src: always use diagnostic file sequence number
This commit attaches a sequence number to all filenames that are automatically generated by DiagnosticFilename. This prevents accidental overwriting of existing files. PR-URL: https://github.com/nodejs/node/pull/27142 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
44a3acb627
commit
547576f530
@ -334,15 +334,13 @@ class DiagnosticFilename {
|
||||
|
||||
DiagnosticFilename(Environment* env,
|
||||
const char* prefix,
|
||||
const char* ext,
|
||||
int seq = -1) :
|
||||
filename_(MakeFilename(env->thread_id(), prefix, ext, seq)) {}
|
||||
const char* ext) :
|
||||
filename_(MakeFilename(env->thread_id(), prefix, ext)) {}
|
||||
|
||||
DiagnosticFilename(uint64_t thread_id,
|
||||
const char* prefix,
|
||||
const char* ext,
|
||||
int seq = -1) :
|
||||
filename_(MakeFilename(thread_id, prefix, ext, seq)) {}
|
||||
const char* ext) :
|
||||
filename_(MakeFilename(thread_id, prefix, ext)) {}
|
||||
|
||||
const char* operator*() const { return filename_.c_str(); }
|
||||
|
||||
@ -350,8 +348,7 @@ class DiagnosticFilename {
|
||||
static std::string MakeFilename(
|
||||
uint64_t thread_id,
|
||||
const char* prefix,
|
||||
const char* ext,
|
||||
int seq = -1);
|
||||
const char* ext);
|
||||
|
||||
std::string filename_;
|
||||
};
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include <cstring>
|
||||
#include <ctime>
|
||||
#include <cwctype>
|
||||
#include <atomic>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <climits> // PATH_MAX
|
||||
@ -73,9 +72,6 @@ static void PrintLoadedLibraries(JSONWriter* writer);
|
||||
static void PrintComponentVersions(JSONWriter* writer);
|
||||
static void PrintRelease(JSONWriter* writer);
|
||||
|
||||
// Global variables
|
||||
static std::atomic_int seq = {0}; // sequence number for report filenames
|
||||
|
||||
// External function to trigger a report, writing to file.
|
||||
// The 'name' parameter is in/out: an input filename is used
|
||||
// if supplied, and the actual filename is returned.
|
||||
@ -99,7 +95,7 @@ std::string TriggerNodeReport(Isolate* isolate,
|
||||
filename = options->report_filename;
|
||||
} else {
|
||||
filename = *DiagnosticFilename(env != nullptr ? env->thread_id() : 0,
|
||||
"report", "json", seq++);
|
||||
"report", "json");
|
||||
}
|
||||
|
||||
// Open the report file stream for writing. Supports stdout/err,
|
||||
|
@ -41,10 +41,13 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <atomic>
|
||||
#include <cstdio>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
|
||||
static std::atomic_int seq = {0}; // Sequence number for diagnostic filenames.
|
||||
|
||||
namespace node {
|
||||
|
||||
// Microseconds in a second, as a float.
|
||||
@ -225,8 +228,7 @@ void DiagnosticFilename::LocalTime(TIME_TYPE* tm_struct) {
|
||||
std::string DiagnosticFilename::MakeFilename(
|
||||
uint64_t thread_id,
|
||||
const char* prefix,
|
||||
const char* ext,
|
||||
int seq) {
|
||||
const char* ext) {
|
||||
std::ostringstream oss;
|
||||
TIME_TYPE tm_struct;
|
||||
LocalTime(&tm_struct);
|
||||
@ -262,8 +264,7 @@ std::string DiagnosticFilename::MakeFilename(
|
||||
#endif
|
||||
oss << "." << uv_os_getpid();
|
||||
oss << "." << thread_id;
|
||||
if (seq >= 0)
|
||||
oss << "." << std::setfill('0') << std::setw(3) << ++seq;
|
||||
oss << "." << std::setfill('0') << std::setw(3) << ++seq;
|
||||
oss << "." << ext;
|
||||
return oss.str();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user