[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