]> mj.ucw.cz Git - umpf.git/blobdiff - lock.c
fix many little bugs, release 0.1
[umpf.git] / lock.c
diff --git a/lock.c b/lock.c
index 1dfa7ebdd58ac1781af2e430828e6c18e2f7ec55..12f40830b4e4f4bee8b4846556b986e8cb6d221c 100644 (file)
--- a/lock.c
+++ b/lock.c
@@ -8,6 +8,7 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <sys/stat.h>
+#include <time.h>
 
 #include "umpf.h"
 
@@ -51,11 +52,10 @@ cat(char* l, char* r)
        char* res = xmalloc(strlen(l) + strlen (r) + 1);
        strcpy(res, l);
        strcat(res, r);
-
+       
        return res;     
 }
 
-/* FIXME: what about privileges? */
 static int
 dot_lock(char* path)
 {
@@ -64,7 +64,10 @@ dot_lock(char* path)
        int res = -1;
        char* lockfile = cat(path, ".lock");
 
+       raise_gid();
        for (i = 0; i < LOCK_MAX_TRIES; i++){
+               struct stat buf;
+
                if ((fd = open(lockfile, O_WRONLY | O_EXCL | O_CREAT, 0)) 
                        >= 0) {
                        close(fd);
@@ -74,11 +77,13 @@ dot_lock(char* path)
 
                if (errno != EEXIST)
                        break;
-
-               /* FIXME: deal with old locks */
-
+               /* deal with old locks */
+               stat(lockfile, &buf);
+               if ((time(NULL) - buf.st_mtime) > 3600)
+                       unlink(lockfile);               
                random_sleep(1, 1);
        }
+       drop_gid();
 
        free(lockfile);
        return res;