commit f5c58ad1536d3b26b1245b4d7fba2bebfdacff94 from: Stefan Sperling date: Sun May 12 22:05:59 2019 UTC fix leftover lockfiles from parse_ref_file() commit - a875589a9d2af343438e8ea0ba7c507db05f5623 commit + f5c58ad1536d3b26b1245b4d7fba2bebfdacff94 blob - 3f03033d5a12dcd98b39c6e2535e82d6fe99d0b5 blob + ff09bbce69de69bf78d62bc157725924fc2ff292 --- lib/reference.c +++ lib/reference.c @@ -174,25 +174,38 @@ parse_ref_file(struct got_reference **ref, const char } 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; }