зеркало из https://github.com/microsoft/git.git
Improve use of lockfile API
Remove remaining double close(2)'s. i.e. close() before commit_locked_index() or commit_lock_file(). Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d6cf61bfd4
Коммит
4ed7cd3ab0
|
@ -259,7 +259,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
|||
finish:
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) || commit_locked_index(&lock_file))
|
||||
commit_locked_index(&lock_file))
|
||||
die("Unable to write new index file");
|
||||
}
|
||||
|
||||
|
|
|
@ -2921,7 +2921,7 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
|
|||
|
||||
if (update_index) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) || commit_locked_index(&lock_file))
|
||||
commit_locked_index(&lock_file))
|
||||
die("Unable to write new index file");
|
||||
}
|
||||
|
||||
|
|
|
@ -246,8 +246,8 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
|
|||
* want to update cache.
|
||||
*/
|
||||
if (state.refresh_cache) {
|
||||
close(newfd); newfd = -1;
|
||||
rollback_lock_file(&lock_file);
|
||||
newfd = -1;
|
||||
}
|
||||
state.refresh_cache = 0;
|
||||
}
|
||||
|
@ -297,7 +297,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
|
|||
|
||||
if (0 <= newfd &&
|
||||
(write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) || commit_locked_index(&lock_file)))
|
||||
commit_locked_index(&lock_file)))
|
||||
die("Unable to write new index file");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -237,7 +237,8 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
|
|||
int fd = hold_locked_index(&index_lock, 1);
|
||||
add_files_to_cache(0, also ? prefix : NULL, pathspec);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (write_cache(fd, active_cache, active_nr))
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&index_lock))
|
||||
die("unable to write new_index file");
|
||||
commit_style = COMMIT_NORMAL;
|
||||
return index_lock.filename;
|
||||
|
@ -298,7 +299,8 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
|
|||
fd = hold_locked_index(&index_lock, 1);
|
||||
add_remove_files(&partial);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (write_cache(fd, active_cache, active_nr))
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&index_lock))
|
||||
die("unable to write new_index file");
|
||||
|
||||
fd = hold_lock_file_for_update(&false_lock,
|
||||
|
@ -308,7 +310,8 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
|
|||
add_remove_files(&partial);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
|
||||
if (write_cache(fd, active_cache, active_nr))
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close_lock_file(&false_lock))
|
||||
die("unable to write temporary index file");
|
||||
return false_lock.filename;
|
||||
}
|
||||
|
|
|
@ -190,7 +190,7 @@ static void refresh_index_quietly(void)
|
|||
refresh_cache(REFRESH_QUIET|REFRESH_UNMERGED);
|
||||
|
||||
if (active_cache_changed &&
|
||||
!write_cache(fd, active_cache, active_nr) && !close(fd))
|
||||
!write_cache(fd, active_cache, active_nr))
|
||||
commit_locked_index(lock_file);
|
||||
|
||||
rollback_lock_file(lock_file);
|
||||
|
|
|
@ -783,7 +783,6 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args,
|
|||
unlink(shallow);
|
||||
rollback_lock_file(&lock);
|
||||
} else {
|
||||
close(fd);
|
||||
commit_lock_file(&lock);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -264,7 +264,6 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
|
|||
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) ||
|
||||
commit_locked_index(&lock_file))
|
||||
die("Unable to write new index file");
|
||||
}
|
||||
|
|
|
@ -108,6 +108,12 @@ static int pack_refs(unsigned int flags)
|
|||
die("failed to write ref-pack file");
|
||||
if (fflush(cbdata.refs_file) || fsync(fd) || fclose(cbdata.refs_file))
|
||||
die("failed to write ref-pack file (%s)", strerror(errno));
|
||||
/*
|
||||
* Since the lock file was fdopen()'ed and then fclose()'ed above,
|
||||
* assign -1 to the lock file descriptor so that commit_lock_file()
|
||||
* won't try to close() it.
|
||||
*/
|
||||
packed.fd = -1;
|
||||
if (commit_lock_file(&packed) < 0)
|
||||
die("unable to overwrite old ref-pack file (%s)", strerror(errno));
|
||||
if (cbdata.flags & PACK_REFS_PRUNE)
|
||||
|
|
|
@ -283,7 +283,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||
}
|
||||
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) || commit_locked_index(&lock_file))
|
||||
commit_locked_index(&lock_file))
|
||||
die("unable to write new index file");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -61,9 +61,9 @@ static int write_rr(struct path_list *rr, int out_fd)
|
|||
write_in_full(out_fd, path, length) != length)
|
||||
die("unable to write rerere record");
|
||||
}
|
||||
if (close(out_fd) != 0)
|
||||
if (commit_lock_file(&write_lock) != 0)
|
||||
die("unable to write rerere record");
|
||||
return commit_lock_file(&write_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int handle_file(const char *path,
|
||||
|
|
|
@ -108,7 +108,6 @@ static int update_index_refresh(int fd, struct lock_file *index_lock)
|
|||
return error("Could not read index");
|
||||
result = refresh_cache(0) ? 1 : 0;
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close(fd) ||
|
||||
commit_locked_index(index_lock))
|
||||
return error ("Could not refresh index");
|
||||
return result;
|
||||
|
|
|
@ -371,13 +371,13 @@ static int revert_or_cherry_pick(int argc, const char **argv)
|
|||
i++;
|
||||
}
|
||||
}
|
||||
if (close(msg_fd) || commit_lock_file(&msg_file) < 0)
|
||||
if (commit_lock_file(&msg_file) < 0)
|
||||
die ("Error wrapping up %s", defmsg);
|
||||
fprintf(stderr, "Automatic %s failed.%s\n",
|
||||
me, help_msg(commit->object.sha1));
|
||||
exit(1);
|
||||
}
|
||||
if (close(msg_fd) || commit_lock_file(&msg_file) < 0)
|
||||
if (commit_lock_file(&msg_file) < 0)
|
||||
die ("Error wrapping up %s", defmsg);
|
||||
fprintf(stderr, "Finished one %s.\n", me);
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
|
|||
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) || commit_locked_index(&lock_file))
|
||||
commit_locked_index(&lock_file))
|
||||
die("Unable to write new index file");
|
||||
}
|
||||
|
||||
|
|
|
@ -738,7 +738,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||
get_index_file(), strerror(lock_error));
|
||||
}
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
close(newfd) || commit_locked_index(lock_file))
|
||||
commit_locked_index(lock_file))
|
||||
die("Unable to write new index file");
|
||||
}
|
||||
|
||||
|
|
|
@ -35,12 +35,10 @@ int write_tree(unsigned char *sha1, int missing_ok, const char *prefix)
|
|||
missing_ok, 0) < 0)
|
||||
die("git-write-tree: error building trees");
|
||||
if (0 <= newfd) {
|
||||
if (!write_cache(newfd, active_cache, active_nr)
|
||||
&& !close(newfd)) {
|
||||
commit_lock_file(lock_file);
|
||||
if (!write_cache(newfd, active_cache, active_nr) &&
|
||||
!commit_lock_file(lock_file))
|
||||
newfd = -1;
|
||||
}
|
||||
}
|
||||
/* Not being able to write is fine -- we are only interested
|
||||
* in updating the cache-tree part, and if the next caller
|
||||
* ends up using the old index with unupdated cache-tree part
|
||||
|
@ -60,7 +58,6 @@ int write_tree(unsigned char *sha1, int missing_ok, const char *prefix)
|
|||
hashcpy(sha1, active_cache_tree->sha1);
|
||||
|
||||
if (0 <= newfd)
|
||||
close(newfd);
|
||||
rollback_lock_file(lock_file);
|
||||
|
||||
return 0;
|
||||
|
|
14
bundle.c
14
bundle.c
|
@ -317,6 +317,14 @@ int create_bundle(struct bundle_header *header, const char *path,
|
|||
rls.git_cmd = 1;
|
||||
if (start_command(&rls))
|
||||
return error("Could not spawn pack-objects");
|
||||
|
||||
/*
|
||||
* start_command closed bundle_fd if it was > 1
|
||||
* so set the lock fd to -1 so commit_lock_file()
|
||||
* won't fail trying to close it.
|
||||
*/
|
||||
lock.fd = -1;
|
||||
|
||||
for (i = 0; i < revs.pending.nr; i++) {
|
||||
struct object *object = revs.pending.objects[i].item;
|
||||
if (object->flags & UNINTERESTING)
|
||||
|
@ -326,10 +334,8 @@ int create_bundle(struct bundle_header *header, const char *path,
|
|||
}
|
||||
if (finish_command(&rls))
|
||||
return error ("pack-objects died");
|
||||
close(bundle_fd);
|
||||
if (!bundle_to_stdout)
|
||||
commit_lock_file(&lock);
|
||||
return 0;
|
||||
|
||||
return bundle_to_stdout ? close(bundle_fd) : commit_lock_file(&lock);
|
||||
}
|
||||
|
||||
int unbundle(struct bundle_header *header, int bundle_fd)
|
||||
|
|
8
config.c
8
config.c
|
@ -955,14 +955,12 @@ int git_config_set_multivar(const char* key, const char* value,
|
|||
munmap(contents, contents_sz);
|
||||
}
|
||||
|
||||
if (close(fd) || commit_lock_file(lock) < 0) {
|
||||
if (commit_lock_file(lock) < 0) {
|
||||
fprintf(stderr, "Cannot commit config file!\n");
|
||||
ret = 4;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
/* fd is closed, so don't try to close it below. */
|
||||
fd = -1;
|
||||
/*
|
||||
* lock is committed, so don't try to roll it back below.
|
||||
* NOTE: Since lockfile.c keeps a linked list of all created
|
||||
|
@ -973,8 +971,6 @@ int git_config_set_multivar(const char* key, const char* value,
|
|||
ret = 0;
|
||||
|
||||
out_free:
|
||||
if (0 <= fd)
|
||||
close(fd);
|
||||
if (lock)
|
||||
rollback_lock_file(lock);
|
||||
free(config_filename);
|
||||
|
@ -1072,7 +1068,7 @@ int git_config_rename_section(const char *old_name, const char *new_name)
|
|||
}
|
||||
fclose(config_file);
|
||||
unlock_and_out:
|
||||
if (close(out_fd) || commit_lock_file(lock) < 0)
|
||||
if (commit_lock_file(lock) < 0)
|
||||
ret = error("Cannot commit config file!");
|
||||
out:
|
||||
free(config_filename);
|
||||
|
|
|
@ -1546,10 +1546,18 @@ static void dump_marks(void)
|
|||
}
|
||||
|
||||
dump_marks_helper(f, 0, marks);
|
||||
fclose(f);
|
||||
if (commit_lock_file(&mark_lock))
|
||||
if (ferror(f) || fclose(f))
|
||||
failure |= error("Unable to write marks file %s: %s",
|
||||
mark_file, strerror(errno));
|
||||
/*
|
||||
* Since the lock file was fdopen()'ed and then fclose()'ed above,
|
||||
* assign -1 to the lock file descriptor so that commit_lock_file()
|
||||
* won't try to close() it.
|
||||
*/
|
||||
mark_lock.fd = -1;
|
||||
if (commit_lock_file(&mark_lock))
|
||||
failure |= error("Unable to write commit file %s: %s",
|
||||
mark_file, strerror(errno));
|
||||
}
|
||||
|
||||
static int read_next_command(void)
|
||||
|
|
|
@ -1753,7 +1753,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
if (active_cache_changed &&
|
||||
(write_cache(index_fd, active_cache, active_nr) ||
|
||||
close(index_fd) || commit_locked_index(lock)))
|
||||
commit_locked_index(lock)))
|
||||
die ("unable to write %s", get_index_file());
|
||||
|
||||
return clean ? 0: 1;
|
||||
|
|
6
refs.c
6
refs.c
|
@ -864,7 +864,6 @@ static int repack_without_ref(const char *refname)
|
|||
die("too long a refname '%s'", list->name);
|
||||
write_or_die(fd, line, len);
|
||||
}
|
||||
close(fd);
|
||||
return commit_lock_file(&packlock);
|
||||
}
|
||||
|
||||
|
@ -1021,12 +1020,9 @@ int rename_ref(const char *oldref, const char *newref, const char *logmsg)
|
|||
|
||||
void unlock_ref(struct ref_lock *lock)
|
||||
{
|
||||
if (lock->lock_fd >= 0) {
|
||||
close(lock->lock_fd);
|
||||
/* Do not free lock->lk -- atexit() still looks at them */
|
||||
if (lock->lk)
|
||||
rollback_lock_file(lock->lk);
|
||||
}
|
||||
free(lock->ref_name);
|
||||
free(lock->orig_ref_name);
|
||||
free(lock);
|
||||
|
@ -1151,7 +1147,7 @@ int write_ref_sha1(struct ref_lock *lock,
|
|||
}
|
||||
if (write_in_full(lock->lock_fd, sha1_to_hex(sha1), 40) != 40 ||
|
||||
write_in_full(lock->lock_fd, &term, 1) != 1
|
||||
|| close(lock->lock_fd) < 0) {
|
||||
|| close_lock_file(lock->lk) < 0) {
|
||||
error("Couldn't write %s", lock->lk->filename);
|
||||
unlock_ref(lock);
|
||||
return -1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче