+
+
+void go_threading(void);
+
+
+
+/*
+ * Create or remove a lock file, so we only have one Citadel Server running at a time.
+ */
+void ctdl_lockfile(int yo) {
+ static char lockfilename[SIZ];
+ static FILE *fp;
+
+
+ if (yo) {
+ syslog(LOG_DEBUG, "Creating lockfile");
+ snprintf(lockfilename, sizeof lockfilename, "%s/citadel.lock", ctdl_run_dir);
+ fp = fopen(lockfilename, "w");
+ if (!fp) {
+ syslog(LOG_ERR, "Cannot open or create %s", lockfilename);
+ exit(CTDLEXIT_DB);
+ }
+ if (flock(fileno(fp), (LOCK_EX|LOCK_NB)) != 0) {
+ syslog(LOG_ERR, "Cannot lock %s , is another citserver running?", lockfilename);
+ exit(CTDLEXIT_DB);
+ }
+ return;
+ }
+
+ syslog(LOG_DEBUG, "Removing lockfile");
+ unlink(lockfilename);
+ flock(fileno(fp), LOCK_UN);
+ fclose(fp);
+}
+
+
+
+
+
+