/[imapfilter]/imapfilter/lock.c
ViewVC logotype

Diff of /imapfilter/lock.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by lefcha, Fri Jul 26 22:36:19 2002 UTC revision 1.5.2.4 by lefcha, Sun Feb 2 17:42:18 2003 UTC
# Line 41  void lockfile_check(void) Line 41  void lockfile_check(void)
41      pid_t n;      pid_t n;
42    
43      if ((n = lockfile_pid())) {      if ((n = lockfile_pid())) {
44          fprintf(stderr,          errno = 0;
45                "imapfilter: another imapfilter is running with pid %d\n", n);          kill(n, 0);
46          exit(ERROR_LOCKFILE);          if (errno == ESRCH) {   /* Process does not exist. */
47                fprintf(stderr, "imapfilter: removing stale lockfile\n");
48                lockfile_remove();
49            } else {
50                fprintf(stderr,
51                        "imapfilter: another imapfilter "
52                        "is running with pid %d\n", (int)(n));
53                exit(ERROR_LOCKFILE);
54            }
55      }      }
56  }  }
57    
# Line 54  void lockfile_check(void) Line 62  void lockfile_check(void)
62   */   */
63  pid_t lockfile_pid(void)  pid_t lockfile_pid(void)
64  {  {
     char lockf[PATH_MAX];  
65      char line[LINE_MAX];      char line[LINE_MAX];
66        char lockf[PATH_MAX];
67      FILE *fd;      FILE *fd;
68      pid_t n = 0;      pid_t n = 0;
69    
# Line 87  int lockfile_remove(void) Line 95  int lockfile_remove(void)
95      if (!lockfile)      if (!lockfile)
96          return 0;          return 0;
97    
98      if (unlink(lockfile)) {      if (unlink(lockfile) && errno != ENOENT) {
99          error("imapfilter: removing lockfile; %s\n", strerror(errno));          error("imapfilter: removing lockfile; %s\n", strerror(errno));
100          return ERROR_FILE_OPEN;          return ERROR_FILE_OPEN;
101      }      }
     xfree(lockfile);  
   
102      return 0;      return 0;
103  }  }
104    
# Line 109  void kill_imapfilter(void) Line 115  void kill_imapfilter(void)
115      if (n > 0) {      if (n > 0) {
116          if (kill(n, SIGTERM))          if (kill(n, SIGTERM))
117              fprintf(stderr, "imapfilter: killing process with pid %d; %s\n",              fprintf(stderr, "imapfilter: killing process with pid %d; %s\n",
118                      n, strerror(errno));                      (int)(n), strerror(errno));
119            lockfile_remove();
120          exit(0);          exit(0);
121      } else {      } else {
122          fprintf(stderr, "imapfilter: no other imapfilter is running\n");          fprintf(stderr, "imapfilter: no other imapfilter is running\n");

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.5.2.4

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26