commit - a875589a9d2af343438e8ea0ba7c507db05f5623
commit + f5c58ad1536d3b26b1245b4d7fba2bebfdacff94
blob - 3f03033d5a12dcd98b39c6e2535e82d6fe99d0b5
blob + ff09bbce69de69bf78d62bc157725924fc2ff292
--- lib/reference.c
+++ lib/reference.c
}
f = fopen(abspath, "rb");
- if (f == NULL)
+ if (f == NULL) {
+ if (lock)
+ got_lockfile_unlock(lf);
return NULL;
+ }
line = fparseln(f, &len, NULL, delim, 0);
if (line == NULL) {
err = got_error(GOT_ERR_BAD_REF_DATA);
+ if (lock)
+ got_lockfile_unlock(lf);
goto done;
}
err = parse_ref_line(ref, name, line);
- if (err == NULL && lf)
- (*ref)->lf = lf;
+ if (lock) {
+ if (err)
+ got_lockfile_unlock(lf);
+ else {
+ if (*ref)
+ (*ref)->lf = lf;
+ else
+ got_lockfile_unlock(lf);
+ }
+ }
done:
free(line);
if (fclose(f) != 0 && err == NULL) {
err = got_error_prefix_errno("fclose");
- if (lf)
- got_lockfile_unlock(lf);
if (*ref) {
+ if (lock)
+ got_ref_unlock(*ref);
got_ref_close(*ref);
*ref = NULL;
}