99 lines
3.1 KiB
Diff
99 lines
3.1 KiB
Diff
commit bc870150cc2116584aee288d15ac2b9a2f825ff5
|
|
Author: Steve Dickson <steved@redhat.com>
|
|
Date: Wed Dec 17 16:41:35 2008 -0500
|
|
|
|
statd: not unlinking host files
|
|
|
|
Statd is not unlinking host files during SM_UNMON and
|
|
SM_UNMON_ALL calls because the given host is still on the run-time
|
|
notify list (rtnl) and the check flag is set when xunlink() is
|
|
called. But the next thing the caller of xunlink() does is
|
|
remove the host from the rtnl list which means the
|
|
unlink will never happen.
|
|
|
|
So this patch removes the check flag from xunlink() since
|
|
its not needed and correctly allocates and frees memory
|
|
used by xunlink().
|
|
|
|
Signed-off-by: Steve Dickson <steved@redhat.com>
|
|
|
|
diff --git a/utils/statd/misc.c b/utils/statd/misc.c
|
|
index fd201b4..7256291 100644
|
|
--- a/utils/statd/misc.c
|
|
+++ b/utils/statd/misc.c
|
|
@@ -53,23 +53,25 @@ xstrdup (const char *string)
|
|
|
|
|
|
/*
|
|
- * Call with check=1 to verify that this host is not still on the rtnl
|
|
- * before unlinking file.
|
|
+ * Unlinking a file.
|
|
*/
|
|
void
|
|
-xunlink (char *path, char *host, short int check)
|
|
+xunlink (char *path, char *host)
|
|
{
|
|
- char *tozap;
|
|
+ char *tozap;
|
|
|
|
- tozap=alloca (strlen(path)+strlen(host)+2);
|
|
- sprintf (tozap, "%s/%s", path, host);
|
|
+ tozap = malloc(strlen(path)+strlen(host)+2);
|
|
+ if (tozap == NULL) {
|
|
+ note(N_ERROR, "xunlink: malloc failed: errno %d (%s)",
|
|
+ errno, strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+ sprintf (tozap, "%s/%s", path, host);
|
|
|
|
- if (!check || !nlist_gethost(rtnl, host, 0)) {
|
|
- if (unlink (tozap) == -1)
|
|
- note (N_ERROR, "unlink (%s): %s", tozap, strerror (errno));
|
|
- else
|
|
- dprintf (N_DEBUG, "Unlinked %s", tozap);
|
|
- }
|
|
- else
|
|
- dprintf (N_DEBUG, "Not unlinking %s--host still monitored.", tozap);
|
|
+ if (unlink (tozap) == -1)
|
|
+ note(N_ERROR, "unlink (%s): %s", tozap, strerror (errno));
|
|
+ else
|
|
+ dprintf (N_DEBUG, "Unlinked %s", tozap);
|
|
+
|
|
+ free(tozap);
|
|
}
|
|
diff --git a/utils/statd/monitor.c b/utils/statd/monitor.c
|
|
index a6a1d9c..24c2531 100644
|
|
--- a/utils/statd/monitor.c
|
|
+++ b/utils/statd/monitor.c
|
|
@@ -352,7 +352,7 @@ sm_unmon_1_svc(struct mon_id *argp, struct svc_req *rqstp)
|
|
/* PRC: do the HA callout: */
|
|
ha_callout("del-client", mon_name, my_name, -1);
|
|
|
|
- xunlink(SM_DIR, clnt->dns_name, 1);
|
|
+ xunlink(SM_DIR, clnt->dns_name);
|
|
nlist_free(&rtnl, clnt);
|
|
|
|
return (&result);
|
|
@@ -404,7 +404,7 @@ sm_unmon_all_1_svc(struct my_id *argp, struct svc_req *rqstp)
|
|
temp = NL_NEXT(clnt);
|
|
/* PRC: do the HA callout: */
|
|
ha_callout("del-client", mon_name, my_name, -1);
|
|
- xunlink(SM_DIR, clnt->dns_name, 1);
|
|
+ xunlink(SM_DIR, clnt->dns_name);
|
|
nlist_free(&rtnl, clnt);
|
|
++count;
|
|
clnt = temp;
|
|
diff --git a/utils/statd/statd.h b/utils/statd/statd.h
|
|
index 5a6e289..88ba208 100644
|
|
--- a/utils/statd/statd.h
|
|
+++ b/utils/statd/statd.h
|
|
@@ -53,7 +53,7 @@ extern int process_notify_list(void);
|
|
extern int process_reply(FD_SET_TYPE *);
|
|
extern char * xstrdup(const char *);
|
|
extern void * xmalloc(size_t);
|
|
-extern void xunlink (char *, char *, short int);
|
|
+extern void xunlink (char *, char *);
|
|
extern void load_state(void);
|
|
|
|
/*
|