зеркало из https://github.com/microsoft/git.git
gvfs-helper: retry when creating temp files
When we create temp files for downloading packs, we use a name based on the current timestamp. There is no randomness in the name, so we can have collisions in the same second. Retry the temp pack names using a new "-<retry>" suffix to the name before the ".temp". Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
This commit is contained in:
Родитель
a0d5f04651
Коммит
468356e581
|
@ -1662,6 +1662,7 @@ static void my_create_tempfile(
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
int len_tp;
|
int len_tp;
|
||||||
enum scld_error scld;
|
enum scld_error scld;
|
||||||
|
int retries;
|
||||||
|
|
||||||
gh__response_status__zero(status);
|
gh__response_status__zero(status);
|
||||||
|
|
||||||
|
@ -1710,7 +1711,15 @@ static void my_create_tempfile(
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
retries = 0;
|
||||||
*t1 = create_tempfile(buf.buf);
|
*t1 = create_tempfile(buf.buf);
|
||||||
|
while (!*t1 && retries < 5) {
|
||||||
|
retries++;
|
||||||
|
strbuf_setlen(&buf, len_tp);
|
||||||
|
strbuf_addf(&buf, "%s-%d.%s", basename.buf, retries, suffix1);
|
||||||
|
*t1 = create_tempfile(buf.buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (!*t1) {
|
if (!*t1) {
|
||||||
strbuf_addf(&status->error_message,
|
strbuf_addf(&status->error_message,
|
||||||
"could not create tempfile: '%s'",
|
"could not create tempfile: '%s'",
|
||||||
|
@ -1732,6 +1741,13 @@ static void my_create_tempfile(
|
||||||
strbuf_addf( &buf, "%s.%s", basename.buf, suffix2);
|
strbuf_addf( &buf, "%s.%s", basename.buf, suffix2);
|
||||||
|
|
||||||
*t2 = create_tempfile(buf.buf);
|
*t2 = create_tempfile(buf.buf);
|
||||||
|
while (!*t2 && retries < 5) {
|
||||||
|
retries++;
|
||||||
|
strbuf_setlen(&buf, len_tp);
|
||||||
|
strbuf_addf(&buf, "%s-%d.%s", basename.buf, retries, suffix2);
|
||||||
|
*t2 = create_tempfile(buf.buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (!*t2) {
|
if (!*t2) {
|
||||||
strbuf_addf(&status->error_message,
|
strbuf_addf(&status->error_message,
|
||||||
"could not create tempfile: '%s'",
|
"could not create tempfile: '%s'",
|
||||||
|
|
Загрузка…
Ссылка в новой задаче