diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index c4821c51ed..19250e01a4 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -21,13 +21,43 @@ #include "../../safeguards.h" +#if defined(UNIX) && defined(__GLIBC__) +#include +#endif + template void DumpState(Tpf &pf1, Tpf &pf2) { DumpTarget dmp1, dmp2; pf1.DumpBase(dmp1); pf2.DumpBase(dmp2); + +#if defined(UNIX) && defined(__GLIBC__) + static unsigned int num = 0; + int pid = getpid(); + const char *fn1 = NULL; + const char *fn2 = NULL; + FILE *f1 = NULL; + FILE *f2 = NULL; + for(;;) { + free(fn1); + fn1 = str_fmt("yapf-%d-%u-1.txt", pid, num); + f1 = fopen(fn1, "wx"); + if (f1 == NULL && errno == EEXIST) { + num++; + continue; + } + fn2 = str_fmt("yapf-%d-%u-2.txt", pid, num); + f2 = fopen(fn2, "w"); + num++; + break; + } + DEBUG(desync, 0, "Dumping YAPF state to %s and %s", fn1, fn2); + free(fn1); + free(fn2); +#else FILE *f1 = fopen("yapf1.txt", "wt"); FILE *f2 = fopen("yapf2.txt", "wt"); +#endif fwrite(dmp1.m_out.Data(), 1, dmp1.m_out.Size(), f1); fwrite(dmp2.m_out.Data(), 1, dmp2.m_out.Size(), f2); fclose(f1);