[ekg2-commit] ekg2: sessions.c (HEAD) vars.c (HEAD) [peres]

CVS commit cvs w toxygen.net
Czw, 3 Maj 2007, 13:11:46 CEST


Module name:	ekg2
Changes by:	peres	2007-05-03 13:11:44

Modified files:
	sessions.c vars.c

Log message:
'session_locks' change handler.

Index: sessions.c
===================================================================
RCS file: /home/cvs/ekg2/ekg/sessions.c,v
diff -d -u -r1.124 -r1.125
--- sessions.c	2 May 2007 18:34:10 -0000	1.124
+++ sessions.c	3 May 2007 11:11:44 -0000	1.125
@@ -289,8 +289,13 @@
 	
 	if (s->connected)
 		command_exec_format(NULL, s, 1, ("/disconnect %s"), s->uid);
+	if (s->lock_fd != -1) { /* this shouldn't happen */
+		flock(s->lock_fd, LOCK_UN);
+		close(s->lock_fd);
+			/* XXX: unlink then? */
+	}
 
-	/* remove sessio watches */
+	/* remove session watches */
 	for (l = watches; l; l = l->next) {
 		watch_t *w = l->data;
 
@@ -1623,6 +1628,46 @@
 	fclose(f);
 }
 
+void changed_session_locks(char *varname) {
+	list_t l;
+
+	if (config_session_locks != 1) {
+			/* unlock all files, close fds */
+		for (l = sessions; l; l = l->next) {
+			session_t *s = l->data;
+
+			if (s->lock_fd != -1) {
+				flock(s->lock_fd, LOCK_UN);
+				close(s->lock_fd);
+				s->lock_fd = -1;
+			}
+		}
+	}
+
+	if (!config_session_locks) {
+			/* unlink all lockfiles */
+		for (l = sessions; l; l = l->next) {
+			session_t *s = l->data;
+
+			if (s->connected) { /* don't break locks of other copy of ekg2 */
+				char *tmp;
+				const char *path = prepare_path((tmp = saprintf("%s%s", session_uid_get(s), "-lock")), 0);
+				xfree(tmp);
+				unlink(path);
+			}
+		}
+	} else {
+			/* lock all connected sessions */
+		for (l = sessions; l; l = l->next) {
+			session_t *s = l->data;
+
+			if (s->connected && ((config_session_locks != 1) || (s->lock_fd == -1)))
+				command_exec(NULL, s, "/session --lock", 1);
+		}
+	}
+
+}
+
 /*
  * Local Variables:
  * mode: c

Index: vars.c
===================================================================
RCS file: /home/cvs/ekg2/ekg/vars.c,v
diff -d -u -r1.92 -r1.93
--- vars.c	2 May 2007 20:57:21 -0000	1.92
+++ vars.c	3 May 2007 11:11:44 -0000	1.93
@@ -47,6 +47,8 @@
 list_t variables = NULL;
 char *console_charset;
 
+void changed_session_locks(char *varname); /* sessions.c */
+
 /*
  * dd_*()
  *
@@ -130,7 +132,7 @@
 	variable_add(NULL, ("save_password"), VAR_BOOL, 1, &config_save_password, NULL, NULL, NULL);
 	variable_add(NULL, ("save_quit"), VAR_INT, 1, &config_save_quit, NULL, NULL, NULL);
 	variable_add(NULL, ("session_default"), VAR_STR, 2, &config_session_default, NULL, NULL, NULL);
-	variable_add(NULL, ("session_locks"), VAR_INT, 1, &config_session_locks, NULL, variable_map(3, 0, 0, "off", 1, 2, "flock", 2, 1, "file"), NULL);
+	variable_add(NULL, ("session_locks"), VAR_INT, 1, &config_session_locks, changed_session_locks, variable_map(3, 0, 0, "off", 1, 2, "flock", 2, 1, "file"), NULL);
 	variable_add(NULL, ("sessions_save"), VAR_BOOL, 1, &config_sessions_save, NULL, NULL, NULL);
 	variable_add(NULL, ("slash_messages"), VAR_BOOL, 1, &config_slash_messages, NULL, NULL, NULL);
 	variable_add(NULL, ("sort_windows"), VAR_BOOL, 1, &config_sort_windows, NULL, NULL, NULL);


Więcej informacji o liście dyskusyjnej ekg2-commit