diff -r 5a237a99a793 -r d5bc44183aa4 brewco/lock.c --- a/brewco/lock.c Thu Feb 25 22:42:54 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/***************************************************************************** - * Copyright (C) 2015 - * - * Michiel Broek - * - * This file is part of the mbsePi-apps - * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * mbsePi-apps is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ThermFerm; see the file COPYING. If not, write to the Free - * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - *****************************************************************************/ - -#include "lock.h" -#include "brewco.h" - -extern char *varpath; - - -/* - * Put a lock on this program. - */ -int lockprog(char *name) -{ - char *tempfile, *lockfile; - FILE *fp; - pid_t oldpid; - - tempfile = calloc(PATH_MAX, sizeof(char)); - lockfile = calloc(PATH_MAX, sizeof(char)); - - snprintf(tempfile, PATH_MAX, "%s%s.tmp", varpath, name); - snprintf(lockfile, PATH_MAX, "%s%s.pid", varpath, name); - - if ((fp = fopen(tempfile, "w")) == NULL) { - perror(name); - printf("Can't create lockfile \"%s\"\n", tempfile); - free(tempfile); - free(lockfile); - return 1; - } - fprintf(fp, "%10u\n", getpid()); - fclose(fp); - - while (TRUE) { - if (link(tempfile, lockfile) == 0) { - unlink(tempfile); - free(tempfile); - free(lockfile); - return 0; - } - if ((fp = fopen(lockfile, "r")) == NULL) { - perror(name); - printf("Can't open lockfile \"%s\"\n", tempfile); - unlink(tempfile); - free(tempfile); - free(lockfile); - return 1; - } - if (fscanf(fp, "%u", &oldpid) != 1) { - perror(name); - printf("Can't read old pid from \"%s\"\n", tempfile); - fclose(fp); - unlink(tempfile); - free(tempfile); - free(lockfile); - return 1; - } - fclose(fp); - if (kill(oldpid,0) == -1) { - if (errno == ESRCH) { - printf("Stale lock found for pid %u\n", oldpid); - unlink(lockfile); - /* no return, try lock again */ - } else { - perror(name); - printf("Kill for %u failed\n",oldpid); - unlink(tempfile); - free(tempfile); - free(lockfile); - return 1; - } - } else { - printf("Another %s is already running, pid=%u\n", name, oldpid); - unlink(tempfile); - free(tempfile); - free(lockfile); - return 1; - } - } -} - - - -void ulockprog(char *name) -{ - char *lockfile; - pid_t oldpid; - FILE *fp; - - lockfile = calloc(PATH_MAX, sizeof(char)); - snprintf(lockfile, PATH_MAX, "%s%s.pid", varpath, name); - - if ((fp = fopen(lockfile, "r")) == NULL) { - syslog(LOG_NOTICE, "Can't open lockfile \"%s\"", lockfile); - free(lockfile); - return; - } - - if (fscanf(fp, "%u", &oldpid) != 1) { - syslog(LOG_NOTICE, "Can't read old pid from \"%s\"", lockfile); - fclose(fp); - unlink(lockfile); - free(lockfile); - return; - } - - fclose(fp); - - if (oldpid == getpid()) { - (void)unlink(lockfile); - } - - free(lockfile); -} - -