cluster: RHEL63 - cman init: add extra documentation for FENCE_JOIN=""
by Fabio M. Di Nitto
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=356cbad9143...
Commit: 356cbad91438bf957e9ec9866e8863125d1b7dc5
Parent: f364b4711fa7b7d5e43d196afbb208790e0015eb
Author: Fabio M. Di Nitto <fdinitto(a)redhat.com>
AuthorDate: Tue May 15 16:37:13 2012 +0200
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Fri Aug 17 10:31:07 2012 +0200
cman init: add extra documentation for FENCE_JOIN=""
Related: rhbz#849049
Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie(a)redhat.com>
---
cman/init.d/cman.in | 3 +++
cman/init.d/cman.init.defaults.in | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in
index f345bcc..f39a9aa 100644
--- a/cman/init.d/cman.in
+++ b/cman/init.d/cman.in
@@ -126,6 +126,9 @@ fi
# set to "yes", then the script will attempt to join the fence domain.
# If FENCE_JOIN is set to any other value, the default behavior is
# to join the fence domain (equivalent to "yes").
+# When setting FENCE_JOIN to "no", it is important to check
+# DLM_CONTROLD_OPTS to reflect expected behavior regarding fencing
+# and quorum.
[ -z "$FENCE_JOIN" ] && FENCE_JOIN="yes"
# FENCED_OPTS -- allow extra options to be passed to fence daemon.
diff --git a/cman/init.d/cman.init.defaults.in b/cman/init.d/cman.init.defaults.in
index d6d010c..6e7f47f 100644
--- a/cman/init.d/cman.init.defaults.in
+++ b/cman/init.d/cman.init.defaults.in
@@ -50,6 +50,9 @@
# set to "yes", then the script will attempt to join the fence domain.
# If FENCE_JOIN is set to any other value, the default behavior is
# to join the fence domain (equivalent to "yes").
+# When setting FENCE_JOIN to "no", it is important to check
+# DLM_CONTROLD_OPTS to reflect expected behavior regarding fencing
+# and quorum.
#FENCE_JOIN="yes"
# FENCED_OPTS -- allow extra options to be passed to fence daemon.
11 years, 8 months
cluster: RHEL63 - cman init: allow sysconfig/cman to pass options to dlm_controld
by Fabio M. Di Nitto
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=f364b4711fa...
Commit: f364b4711fa7b7d5e43d196afbb208790e0015eb
Parent: e01a564837cc5f5310a046da3c71f995c301e649
Author: Fabio M. Di Nitto <fdinitto(a)redhat.com>
AuthorDate: Tue May 15 13:53:28 2012 +0200
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Fri Aug 17 10:30:40 2012 +0200
cman init: allow sysconfig/cman to pass options to dlm_controld
DLM_CONTROLD_OPTS="" can now be used to pass startup options to the
daemon.
Resolves: rhbz#849049
Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie(a)redhat.com>
---
cman/init.d/cman.in | 5 ++++-
cman/init.d/cman.init.defaults.in | 3 +++
2 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in
index 1268b59..f345bcc 100644
--- a/cman/init.d/cman.in
+++ b/cman/init.d/cman.in
@@ -107,6 +107,9 @@ fi
# no (default) | cman will not start sshd
[ -z "$CMAN_SSHD_START" ] && CMAN_SSHD_START=no
+# DLM_CONTROLD_OPTS -- allow extra options to be passed to dlm_controld daemon.
+[ -z "$DLM_CONTROLD_OPTS" ] && DLM_CONTROLD_OPTS=""
+
# FENCE_JOIN_TIMEOUT -- seconds to wait for fence domain join to
# complete. If the join hasn't completed in this time, fence_tool join
# exits with an error, and this script exits with an error. To wait
@@ -615,7 +618,7 @@ stop_fenced()
start_dlm_controld()
{
- start_daemon dlm_controld || return 1
+ start_daemon dlm_controld "$DLM_CONTROLD_OPTS" || return 1
if [ "$INITLOGLEVEL" = "full" ]; then
ok
diff --git a/cman/init.d/cman.init.defaults.in b/cman/init.d/cman.init.defaults.in
index 05c3bc7..d6d010c 100644
--- a/cman/init.d/cman.init.defaults.in
+++ b/cman/init.d/cman.init.defaults.in
@@ -31,6 +31,9 @@
# no (default) | cman will not start sshd
#CMAN_SSHD_START=no
+# DLM_CONTROLD_OPTS -- allow extra options to be passed to dlm_controld daemon.
+#DLM_CONTROLD_OPTS=""
+
# FENCE_JOIN_TIMEOUT -- seconds to wait for fence domain join to
# complete. If the join hasn't completed in this time, fence_tool join
# exits with an error, and this script exits with an error. To wait
11 years, 8 months
cluster: RHEL6 - fsck.gfs2: Fix buffer overflow in get_lockproto_table
by Andrew Price
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=f796ee87527...
Commit: f796ee8752712e9e523e1516bb9165b274552753
Parent: 638deec0ccbf45862eee97294f09ba9d6b3f56d0
Author: Andrew Price <anprice(a)redhat.com>
AuthorDate: Sat Jul 7 22:03:24 2012 +0100
Committer: Andrew Price <anprice(a)redhat.com>
CommitterDate: Thu Aug 16 21:54:56 2012 +0100
fsck.gfs2: Fix buffer overflow in get_lockproto_table
Coverity discovered a buffer overflow in this function where an overly
long cluster name in cluster.conf could cause a crash while repairing
the superblock. This patch fixes the bug by making sure the lock table
is composed sensibly, limiting the fsname to 16 chars as documented, and
only allowing the cluster name (which doesn't seem to have a documented
max size) to use the remaining space in the locktable name string.
Resolves: rhbz#838945
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/fsck/initialize.c | 42 ++++++++++++++++++++++--------------------
1 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c
index 28fe03d..558fd03 100644
--- a/gfs2/fsck/initialize.c
+++ b/gfs2/fsck/initialize.c
@@ -750,12 +750,13 @@ static int init_system_inodes(struct gfs2_sbd *sdp)
static int get_lockproto_table(struct gfs2_sbd *sdp)
{
FILE *fp;
- char line[PATH_MAX], *p, *p2;
- char fsname[PATH_MAX];
+ char line[PATH_MAX];
+ char *cluname, *end;
+ const char *fsname, *cfgfile = "/etc/cluster/cluster.conf";
memset(sdp->lockproto, 0, sizeof(sdp->lockproto));
memset(sdp->locktable, 0, sizeof(sdp->locktable));
- fp = fopen("/etc/cluster/cluster.conf", "rt");
+ fp = fopen(cfgfile, "rt");
if (!fp) {
/* no cluster.conf; must be a stand-alone file system */
strcpy(sdp->lockproto, "lock_nolock");
@@ -768,28 +769,29 @@ static int get_lockproto_table(struct gfs2_sbd *sdp)
log_warn(_("Lock protocol assumed to be: " GFS2_DEFAULT_LOCKPROTO
"\n"));
strcpy(sdp->lockproto, GFS2_DEFAULT_LOCKPROTO);
+
while (fgets(line, sizeof(line) - 1, fp)) {
- p = strstr(line,"<cluster name=");
- if (p) {
- p += 15;
- p2 = strchr(p,'"');
- strncpy(sdp->locktable, p, p2 - p);
+ cluname = strstr(line,"<cluster name=");
+ if (cluname) {
+ cluname += 15;
+ end = strchr(cluname,'"');
+ if (end)
+ *end = '\0';
break;
}
}
- if (sdp->locktable[0] == '\0') {
- log_err(_("Error: Unable to determine cluster name from "
- "/etc/cluster.conf\n"));
+ if (cluname == NULL || end == NULL || end - cluname < 1) {
+ log_err(_("Error: Unable to determine cluster name from %s\n"),
+ cfgfile);
} else {
- memset(fsname, 0, sizeof(fsname));
- p = strrchr(opts.device, '/');
- if (p) {
- p++;
- strncpy(fsname, p, sizeof(fsname));
- } else
- strcpy(fsname, "repaired");
- strcat(sdp->locktable, ":");
- strcat(sdp->locktable, fsname);
+ fsname = strrchr(opts.device, '/');
+ if (fsname)
+ fsname++;
+ else
+ fsname = "repaired";
+ snprintf(sdp->locktable, sizeof(sdp->locktable), "%.*s:%.16s",
+ (int)(sizeof(sdp->locktable) - strlen(fsname) - 2),
+ cluname, fsname);
log_warn(_("Lock table determined to be: %s\n"),
sdp->locktable);
}
11 years, 8 months
dlm: master - dlm_controld: remove fence_all from cli
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=dlm.git;a=commitdiff;h=7b0b7b33b052fbd...
Commit: 7b0b7b33b052fbd3a5b0cafd8dc134ce2ce713ec
Parent: e8fdd228dfff06967223c7c5a36ed72129c096e7
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Aug 16 15:41:12 2012 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Aug 16 15:41:12 2012 -0500
dlm_controld: remove fence_all from cli
The fence_all (and unfence_all) options were
allowed as cli options, and as a fence config.
This made parsing dlm.conf ambiguous because
cli options in dlm.conf have x=y syntax, which
is not the same as the fence config syntax.
Remove the cli option because the config file
will be more common/useful.
Signed-off-by: David Teigland <teigland(a)redhat.com>
---
dlm_controld/daemon_cpg.c | 11 ++---------
dlm_controld/dlm.conf.5 | 4 ----
dlm_controld/dlm_daemon.h | 2 --
dlm_controld/fence.c | 2 +-
dlm_controld/main.c | 14 ++------------
5 files changed, 5 insertions(+), 28 deletions(-)
diff --git a/dlm_controld/daemon_cpg.c b/dlm_controld/daemon_cpg.c
index fee0ef6..61d2da2 100644
--- a/dlm_controld/daemon_cpg.c
+++ b/dlm_controld/daemon_cpg.c
@@ -455,20 +455,13 @@ static struct node_daemon *add_node_daemon(int nodeid)
fc = &node->fence_config;
fc->nodeid = nodeid;
- /* explicit command line arg has first priority */
-
- if (dlm_options[fence_all_ind].cli_set) {
- fc->dev[0] = &fence_all_device;
- goto out;
- }
-
- /* explicit config file setting has second priority */
+ /* explicit config file setting */
rv = fence_config_init(fc, (unsigned int)nodeid, (char *)CONF_FILE_PATH);
if (!rv)
goto out;
- /* no command line, no config file, so use default */
+ /* no config file setting, so use default */
if (rv == -ENOENT) {
fc->dev[0] = &fence_all_device;
diff --git a/dlm_controld/dlm.conf.5 b/dlm_controld/dlm.conf.5
index d722de7..95f74b9 100644
--- a/dlm_controld/dlm.conf.5
+++ b/dlm_controld/dlm.conf.5
@@ -65,10 +65,6 @@ enable_quorum_fencing
.br
enable_quorum_lockspace
.br
-fence_all
-.br
-unfence_all
-.br
.SH Fencing
diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h
index 7cb3c01..ffd501c 100644
--- a/dlm_controld/dlm_daemon.h
+++ b/dlm_controld/dlm_daemon.h
@@ -107,8 +107,6 @@ enum {
enable_startup_fencing_ind,
enable_quorum_fencing_ind,
enable_quorum_lockspace_ind,
- fence_all_ind,
- unfence_all_ind,
help_ind,
version_ind,
dlm_options_max,
diff --git a/dlm_controld/fence.c b/dlm_controld/fence.c
index e53f840..0094b3a 100644
--- a/dlm_controld/fence.c
+++ b/dlm_controld/fence.c
@@ -194,7 +194,7 @@ int unfence_node(int nodeid)
}
if (rv < 0) {
/* there's a problem with the config */
- log_error("fence config %d error %d", nodeid, rv);
+ log_error("unfence %d fence_config_init error %d", nodeid, rv);
return rv;
}
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
index c002520..6eafa49 100644
--- a/dlm_controld/main.c
+++ b/dlm_controld/main.c
@@ -1335,16 +1335,6 @@ static void set_opt_defaults(void)
1, NULL,
"enable/disable quorum requirement for lockspace operations");
- set_opt_default(fence_all_ind,
- "fence_all", '\0', req_arg_str,
- -1, "dlm_stonith",
- "fence all nodes with this agent");
-
- set_opt_default(unfence_all_ind,
- "unfence_all", '\0', no_arg,
- 0, NULL,
- "enable unfencing self with fence_all agent");
-
set_opt_default(help_ind,
"help", 'h', no_arg,
-1, NULL,
@@ -1565,8 +1555,8 @@ int main(int argc, char **argv)
set_opt_file(0);
strcpy(fence_all_device.name, "fence_all");
- strcpy(fence_all_device.agent, opts(fence_all_ind));
- fence_all_device.unfence = opt(unfence_all_ind);
+ strcpy(fence_all_device.agent, "dlm_stonith");
+ fence_all_device.unfence = 0;
INIT_LIST_HEAD(&lockspaces);
INIT_LIST_HEAD(&fs_register_list);
11 years, 8 months
dlm: master - dlm_stonith: include errno.h
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=dlm.git;a=commitdiff;h=e8fdd228dfff069...
Commit: e8fdd228dfff06967223c7c5a36ed72129c096e7
Parent: 5e069a534379611e08714ac81870af6b387a4038
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Aug 16 12:51:13 2012 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Aug 16 12:51:13 2012 -0500
dlm_stonith: include errno.h
pacemaker header now needs it
Signed-off-by: David Teigland <teigland(a)redhat.com>
---
fence/stonith_helper.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/fence/stonith_helper.c b/fence/stonith_helper.c
index df44219..5b384c1 100644
--- a/fence/stonith_helper.c
+++ b/fence/stonith_helper.c
@@ -11,6 +11,7 @@
#include <string.h>
#include <unistd.h>
#include <syslog.h>
+#include <errno.h>
#include <pacemaker/crm/stonith-ng.h>
int nodeid;
11 years, 8 months
dlm: master - dlm_controld: fix uninitialized mem for fence_all config
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=dlm.git;a=commitdiff;h=5e069a534379611...
Commit: 5e069a534379611e08714ac81870af6b387a4038
Parent: d38ab51fc27764ae34849229c7f447cc60de5de1
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Aug 16 11:29:43 2012 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Aug 16 11:31:35 2012 -0500
dlm_controld: fix uninitialized mem for fence_all config
If the fence_all config option is used, this could cause
unfencing to be used when it shouldn't, which could cause
startup to fail.
Signed-off-by: David Teigland <teigland(a)redhat.com>
---
dlm_controld/fence_config.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/dlm_controld/fence_config.c b/dlm_controld/fence_config.c
index 66a1ad6..5d8d7dc 100644
--- a/dlm_controld/fence_config.c
+++ b/dlm_controld/fence_config.c
@@ -251,6 +251,7 @@ int fence_config_init(struct fence_config *fc, unsigned int nodeid, char *path)
rv = -ENOMEM;
goto out;
}
+ memset(dev, 0, sizeof(struct fence_device));
rv = sscanf(line, "%s %s %[^\n]s\n", dev->name, dev->agent, dev->args);
if (rv < 2) {
11 years, 8 months
cluster: STABLE32 - rgmanager: Fix memory leaks reported by static analyzer
by Fabio M. Di Nitto
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=cb7848612a5...
Commit: cb7848612a50a06ab981b687ecdc31e455fe2cd9
Parent: 13bea41ade9dd03a7e34b76a1b88e27b17962320
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Fri Sep 16 15:05:24 2011 -0400
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Wed Aug 15 11:04:38 2012 +0200
rgmanager: Fix memory leaks reported by static analyzer
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/daemons/fo_domain.c | 4 +++-
rgmanager/src/daemons/resrules.c | 4 +++-
rgmanager/src/daemons/restree.c | 4 ++++
rgmanager/src/daemons/rg_state.c | 4 +++-
4 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/rgmanager/src/daemons/fo_domain.c b/rgmanager/src/daemons/fo_domain.c
index 382301f..0ae1344 100644
--- a/rgmanager/src/daemons/fo_domain.c
+++ b/rgmanager/src/daemons/fo_domain.c
@@ -131,8 +131,10 @@ fod_get_domain(int ccsfd, char *base, int idx, fod_t **domains)
} while (!list_done(domains, fod));
fod = malloc(sizeof(*fod));
- if (!fod)
+ if (!fod) {
+ free(ret);
return NULL;
+ }
memset(fod, 0, sizeof(*fod));
fod->fd_name = ret;
fod->fd_nodes = 0;
diff --git a/rgmanager/src/daemons/resrules.c b/rgmanager/src/daemons/resrules.c
index 873488e..c2cfdfa 100644
--- a/rgmanager/src/daemons/resrules.c
+++ b/rgmanager/src/daemons/resrules.c
@@ -1009,8 +1009,10 @@ read_resource_agent_metadata(char *filename)
waitpid(pid, NULL, 0);
close(_pipe[0]);
- if (!size)
+ if (!size) {
+ free(data);
return NULL;
+ }
doc = xmlParseMemory(data, size);
free(data);
diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c
index 9b70334..82f8f29 100644
--- a/rgmanager/src/daemons/restree.c
+++ b/rgmanager/src/daemons/restree.c
@@ -409,6 +409,10 @@ res_exec(resource_node_t *node, int op, const char *arg, int depth)
execle(fullpath, fullpath, op_str, arg, NULL, env);
else
execle(fullpath, fullpath, op_str, NULL, env);
+
+ /* Should not happen */
+ free(env);
+ exit(1);
}
#ifdef DEBUG
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 463e12f..30470ac 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -1945,8 +1945,10 @@ handle_relocate_req(char *svcName, int orig_request, int preferred_target,
while (memb_count(allowed_nodes)) {
target = best_target_node(allowed_nodes, me, svcName, 1);
- if (target == me)
+ if (target == me) {
+ free_member_list(allowed_nodes);
goto exhausted;
+ }
retries = 0;
retry:
11 years, 8 months
cluster: STABLE32 - rgmanager: Fix potential use-after-free
by Fabio M. Di Nitto
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=13bea41ade9...
Commit: 13bea41ade9dd03a7e34b76a1b88e27b17962320
Parent: eaed668e79d60d95b99f746df12515d1dc4d3650
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Fri Sep 16 15:04:56 2011 -0400
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Wed Aug 15 11:04:38 2012 +0200
rgmanager: Fix potential use-after-free
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/daemons/reslist.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/rgmanager/src/daemons/reslist.c b/rgmanager/src/daemons/reslist.c
index 3c05df7..ced3fc2 100644
--- a/rgmanager/src/daemons/reslist.c
+++ b/rgmanager/src/daemons/reslist.c
@@ -885,6 +885,7 @@ load_resources(int ccsfd, resource_t **reslist, resource_rule_t **rulelist)
#endif
destroy_resource(newres);
+ continue;
}
/* Just information */
11 years, 8 months
cluster: STABLE32 - rgmanager: Add dead code to shut up static analyzer
by Fabio M. Di Nitto
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=eaed668e79d...
Commit: eaed668e79d60d95b99f746df12515d1dc4d3650
Parent: 1574ddd9e71fb81af5272efe03af056fd517bdeb
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Fri Sep 16 14:42:21 2011 -0400
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Wed Aug 15 11:04:38 2012 +0200
rgmanager: Add dead code to shut up static analyzer
I bet you didn't see that one coming.
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/daemons/main.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/rgmanager/src/daemons/main.c b/rgmanager/src/daemons/main.c
index 369ea7e..d596e0d 100644
--- a/rgmanager/src/daemons/main.c
+++ b/rgmanager/src/daemons/main.c
@@ -211,7 +211,9 @@ membership_update(void)
if (node_delta)
free_member_list(node_delta);
node_event(1, my_id(), 0, 0);
- /* NOTREACHED */
+ /* NOT REACHED */
+ /* Following simply quiets static analyzers */
+ exit(1);
}
for (x=0; node_delta && x < node_delta->cml_count; x++) {
11 years, 8 months
cluster: STABLE32 - Fix improper cleanup of join-view list
by Fabio M. Di Nitto
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=1574ddd9e71...
Commit: 1574ddd9e71fb81af5272efe03af056fd517bdeb
Parent: 0d1170e29b74e06c0121a418ce90ba05e33de9fb
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Fri Sep 16 14:42:12 2011 -0400
Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com>
CommitterDate: Wed Aug 15 11:04:38 2012 +0200
Fix improper cleanup of join-view list
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/clulib/vft.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/rgmanager/src/clulib/vft.c b/rgmanager/src/clulib/vft.c
index 08dad42..0a97c61 100644
--- a/rgmanager/src/clulib/vft.c
+++ b/rgmanager/src/clulib/vft.c
@@ -931,7 +931,7 @@ vf_invalidate(void)
while ((c_key = key_list) != NULL) {
while ((c_jv = c_key->kn_jvlist) != NULL) {
- key_list->kn_jvlist = c_jv->vn_next;
+ c_key->kn_jvlist = c_jv->vn_next;
free(c_jv);
}
11 years, 8 months