X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/blobdiff_plain/b2d4cdf3a69ade2a5455fae03a0a99a1f9d631ce..4fe5771e2b9a19797889810e88a388d910bb0917:/utils/sterm.c diff --git a/utils/sterm.c b/utils/sterm.c index a3e9786..e708a68 100644 --- a/utils/sterm.c +++ b/utils/sterm.c @@ -174,9 +174,21 @@ int main(int argc, char *argv[]) CHECK(write(tmp, pid, strlen(pid))); close(tmp); snprintf(lockfile, sizeof(lockfile), "/var/lock/LCK..%s", dev + 5); + retry: if (link(template, lockfile) == -1) { - perror(lockfile); - exit(1); + tmp = CHECK(open(lockfile, O_RDONLY)); + CHECK(read(tmp, pid, sizeof(pid))); + close(tmp); + int p = atoi(pid); + char proc[50]; + snprintf(proc, sizeof(proc), "/proc/%d", p); + if (access(proc, F_OK) == 0) { + fprintf(stderr, "%s is used by PID %d\n", dev, p); + exit(1); + } + fprintf(stderr, "Stale lock file %s (PID %d) - removing it!\n", lockfile, p); + CHECK(unlink(lockfile)); + goto retry; } rm_file(0, template); on_exit(rm_file, lockfile);