Commit c19b1c04 by Carlos Martín Nieto

pack: clean up error returns

Set a message when we fail to lock.

Also make the put function void, since it's called from free, which
cannot report errors. The only errors we can experience here are
internal state corruption, so we assert that we are trying to put a
pack which we have previously got.
parent 966fb207
......@@ -62,8 +62,10 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
if ((error = git_packfile__name(&packname, path)) < 0)
return error;
if (git_mutex_lock(&git__mwindow_mutex) < 0)
if (git_mutex_lock(&git__mwindow_mutex) < 0) {
giterr_set(GITERR_OS, "failed to lock mwindow mutex");
return -1;
}
if (git_mwindow_files_init() < 0) {
git_mutex_unlock(&git__mwindow_mutex);
......@@ -103,24 +105,20 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
return 0;
}
int git_mwindow_put_pack(struct git_pack_file *pack)
void git_mwindow_put_pack(struct git_pack_file *pack)
{
int count;
git_strmap_iter pos;
if (git_mutex_lock(&git__mwindow_mutex) < 0)
return -1;
return;
if (git_mwindow_files_init() < 0) {
git_mutex_unlock(&git__mwindow_mutex);
return -1;
}
/* put before get would be a corrupted state */
assert(git__pack_cache);
pos = git_strmap_lookup_index(git__pack_cache, pack->pack_name);
if (!git_strmap_valid_index(git__pack_cache, pos)) {
git_mutex_unlock(&git__mwindow_mutex);
return GIT_ENOTFOUND;
}
/* if we cannot find it, the state is corrupted */
assert(git_strmap_valid_index(git__pack_cache, pos));
count = git_atomic_dec(&pack->refcount);
if (count == 0) {
......@@ -129,7 +127,7 @@ int git_mwindow_put_pack(struct git_pack_file *pack)
}
git_mutex_unlock(&git__mwindow_mutex);
return 0;
return;
}
void git_mwindow_free_all(git_mwindow_file *mwf)
......
......@@ -48,6 +48,6 @@ void git_mwindow_files_free(void);
struct git_pack_file; /* just declaration to avoid cyclical includes */
int git_mwindow_get_pack(struct git_pack_file **out, const char *path);
int git_mwindow_put_pack(struct git_pack_file *pack);
void git_mwindow_put_pack(struct git_pack_file *pack);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment