public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
* cluster: STABLE3 - rgmanager: groups.c cleanup
@ 2009-06-22 13:49 Lon Hohberger
0 siblings, 0 replies; only message in thread
From: Lon Hohberger @ 2009-06-22 13:49 UTC (permalink / raw)
To: cluster-cvs-relay
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=00b0a7e4088e765f81f234eb4d16be099a5eb839
Commit: 00b0a7e4088e765f81f234eb4d16be099a5eb839
Parent: 6882ec2bf4c4ef9f907595c438810865b0297ac7
Author: Lon Hohberger <lhh@redhat.com>
AuthorDate: Tue Jun 16 13:20:51 2009 -0400
Committer: Lon Hohberger <lhh@redhat.com>
CommitterDate: Mon Jun 22 09:32:03 2009 -0400
rgmanager: groups.c cleanup
Fixes complier warnings in groups.c and associated
files which wrongly had prototypes for functions
contained within groups.c.
Signed-off-by: Lon Hohberger <lhh@redhat.com>
---
rgmanager/include/fo_domain.h | 4 +-
rgmanager/include/groups.h | 42 ++++++++++++++++
rgmanager/include/resgroup.h | 22 +++------
rgmanager/include/reslist.h | 19 ++++---
rgmanager/include/restart_counter.h | 2 +-
rgmanager/src/daemons/fo_domain.c | 4 +-
rgmanager/src/daemons/groups.c | 89 ++++++++++++++++++-----------------
rgmanager/src/daemons/reslist.c | 4 +-
rgmanager/src/daemons/rg_event.c | 3 -
rgmanager/src/daemons/rg_state.c | 23 ++-------
10 files changed, 117 insertions(+), 95 deletions(-)
diff --git a/rgmanager/include/fo_domain.h b/rgmanager/include/fo_domain.h
index bc2b1b1..2cc654b 100644
--- a/rgmanager/include/fo_domain.h
+++ b/rgmanager/include/fo_domain.h
@@ -40,9 +40,9 @@ int construct_domains(int ccsfd, fod_t **domains);
void deconstruct_domains(fod_t **domains);
void print_domains(fod_t **domains);
int node_should_start(int nodeid, cluster_member_list_t *membership,
- char *rg_name, fod_t **domains);
+ const char *rg_name, fod_t **domains);
int node_domain_set(fod_t **domains, char *name, int **ret,
int *retlen, int *flags);
int node_domain_set_safe(char *domainname, int **ret, int *retlen, int *flags);
-
+
#endif
diff --git a/rgmanager/include/groups.h b/rgmanager/include/groups.h
new file mode 100644
index 0000000..4f23540
--- /dev/null
+++ b/rgmanager/include/groups.h
@@ -0,0 +1,42 @@
+#ifndef _GROUPS_H
+#define _GROUPS_H
+
+int node_should_start_safe(uint32_t, cluster_member_list_t *, const char *);
+int group_property(const char *groupname, const char *property,
+ char *ret_val, size_t len);
+int count_resource_groups(cluster_member_list_t *ml);
+int count_resource_groups_local(cman_node_t *mp);
+int is_exclusive(const char *svcName);
+int have_exclusive_resources(void);
+int check_exclusive_resources(cluster_member_list_t *membership,
+ const char *svcName);
+int check_depend(resource_t *res);
+
+void dump_config_version(FILE *fp);
+int init_resource_groups(int reconfigure, int do_init);
+void get_recovery_policy(const char *rg_name, char *buf, size_t buflen);
+int get_service_property(const char *rg_name, const char *prop,
+ char *buf, size_t buflen);
+
+int add_restart(const char *rg_name);
+int check_restart(const char *rg_name);
+void kill_resource_groups(void);
+
+/* do this op on all resource groups. The handler for the request
+ will sort out whether or not it's a valid request given the state */
+void rg_doall(int request, int block, const char *debugfmt);
+void do_status_checks(void); /* Queue status checks for locally running
+ services */
+
+int svc_exists(const char *svcname);
+int send_rg_states(msgctx_t *ctx, int fast);
+
+int check_depend_safe(const char *servicename);
+int group_migratory(const char *servicename, int lock);
+int group_event(const char *rg_name, uint32_t state, int owner);
+
+char **get_service_names(int *len);
+
+
+
+#endif
diff --git a/rgmanager/include/resgroup.h b/rgmanager/include/resgroup.h
index 1adcdc8..99eed3e 100644
--- a/rgmanager/include/resgroup.h
+++ b/rgmanager/include/resgroup.h
@@ -161,8 +161,6 @@ int svc_fail(char *svcName);
int svc_freeze(char *svcName);
int svc_unfreeze(char *svcName);
int svc_migrate(char *svcName, int target);
-int check_restart(char *svcName);
-int add_restart(char *svcName);
int rt_enqueue_request(const char *resgroupname, int request,
msgctx_t *resp_ctx,
@@ -172,28 +170,22 @@ void send_response(int ret, int node, request_t *req);
void send_ret(msgctx_t *ctx, char *name, int ret, int orig_request,
int new_owner);
-/* do this op on all resource groups. The handler for the request
- will sort out whether or not it's a valid request given the state */
-void rg_doall(int request, int block, char *debugfmt);
-void do_status_checks(void); /* Queue status checks for locally running
- services */
-
/* from rg_state.c */
-int set_rg_state(char *name, rg_state_t *svcblk);
-int get_rg_state(char *servicename, rg_state_t *svcblk);
-int get_rg_state_local(char *servicename, rg_state_t *svcblk);
+int set_rg_state(const char *name, rg_state_t *svcblk);
+int get_rg_state(const char *servicename, rg_state_t *svcblk);
+int get_rg_state_local(const char *servicename, rg_state_t *svcblk);
uint32_t best_target_node(cluster_member_list_t *allowed, uint32_t owner,
- char *rg_name, int lock);
+ const char *rg_name, int lock);
#ifdef DEBUG
-int _rg_lock_dbg(char *, struct dlm_lksb *, char *, int);
+int _rg_lock_dbg(const char *, struct dlm_lksb *, const char *, int);
#define rg_lock(name, p) _rg_lock_dbg(name, p, __FILE__, __LINE__)
-int _rg_unlock_dbg(struct dlm_lksb *, char *, int);
+int _rg_unlock_dbg(struct dlm_lksb *, const char *, int);
#define rg_unlock(p) _rg_unlock_dbg(p, __FILE__, __LINE__)
#else
-int rg_lock(char *name, struct dlm_lksb *p);
+int rg_lock(const char *name, struct dlm_lksb *p);
int rg_unlock(struct dlm_lksb *p);
#endif
diff --git a/rgmanager/include/reslist.h b/rgmanager/include/reslist.h
index 564f93d..1e5f2b2 100644
--- a/rgmanager/include/reslist.h
+++ b/rgmanager/include/reslist.h
@@ -167,15 +167,18 @@ void destroy_resource_tree(resource_node_t **tree);
/*
Handy functions
*/
-resource_t *find_resource_by_ref(resource_t **reslist, char *type, char *ref);
-resource_t *find_root_by_ref(resource_t **reslist, char *ref);
-resource_rule_t *find_rule_by_type(resource_rule_t **rulelist, char *type);
+resource_t *find_resource_by_ref(resource_t **reslist, const char *type,
+ const char *ref);
+resource_t *find_root_by_ref(resource_t **reslist, const char *ref);
+resource_rule_t *find_rule_by_type(resource_rule_t **rulelist,
+ const char *type);
void res_build_name(char *, size_t, resource_t *);
/*
Internal functions; shouldn't be needed.
*/
-char *xpath_get_one(xmlDocPtr doc, xmlXPathContextPtr ctx, char *query);
+const char *xpath_get_one(xmlDocPtr doc, xmlXPathContextPtr ctx,
+ const char *query);
int store_attribute(resource_attr_t **attrsp, char *name, char *value,
int flags);
@@ -183,10 +186,10 @@ resource_t *load_resource(int ccsfd, resource_rule_t *rule, char *base);
int store_resource(resource_t **reslist, resource_t *newres);
void destroy_resource(resource_t *res);
-char *attr_value(resource_node_t *node, char *attrname);
-char *rg_attr_value(resource_node_t *node, char *attrname);
-char *res_attr_value(resource_t *res, char *attrname);
-char *primary_attr_value(resource_t *);
+const char *attr_value(resource_node_t *node, const char *attrname);
+const char *rg_attr_value(resource_node_t *node, const char *attrname);
+const char *res_attr_value(resource_t *res, const char *attrname);
+const char *primary_attr_value(resource_t *);
int rescmp(resource_t *l, resource_t *r);
#ifdef NO_CCS
diff --git a/rgmanager/include/restart_counter.h b/rgmanager/include/restart_counter.h
index 04714e4..d003584 100644
--- a/rgmanager/include/restart_counter.h
+++ b/rgmanager/include/restart_counter.h
@@ -8,7 +8,7 @@ typedef void *restart_counter_t;
int restart_add(restart_counter_t arg);
int restart_clear(restart_counter_t arg);
int restart_count(restart_counter_t arg);
-int restart_treshold_exceeded(restart_counter_t arg);
+int restart_threshold_exceeded(restart_counter_t arg);
restart_counter_t restart_init(time_t expire_timeout, int max_restarts);
int restart_cleanup(restart_counter_t arg);
diff --git a/rgmanager/src/daemons/fo_domain.c b/rgmanager/src/daemons/fo_domain.c
index 666d187..08590d2 100644
--- a/rgmanager/src/daemons/fo_domain.c
+++ b/rgmanager/src/daemons/fo_domain.c
@@ -18,6 +18,7 @@
#include <members.h>
#include <sets.h>
#include <fo_domain.h>
+#include <groups.h>
//#define DEBUG
@@ -35,7 +36,6 @@
</failoverdomain>
</failoverdomains>
*/
-int group_property(char *, char *, char *, size_t);
static fod_node_t *
#ifndef NO_CCS
@@ -411,7 +411,7 @@ node_domain_set(fod_t **domains, char *name, int **ret, int *retlen, int *flags)
*/
int
node_should_start(int nodeid, cluster_member_list_t *membership,
- char *rg_name, fod_t **domains)
+ const char *rg_name, fod_t **domains)
{
char *nodename = NULL;
char domainname[128];
diff --git a/rgmanager/src/daemons/groups.c b/rgmanager/src/daemons/groups.c
index 4e901a6..a0b7159 100644
--- a/rgmanager/src/daemons/groups.c
+++ b/rgmanager/src/daemons/groups.c
@@ -14,6 +14,7 @@
#include <event.h>
#include <sets.h>
#include <fo_domain.h>
+#include <groups.h>
/* Use address field in this because we never use it internally,
and there is no extra space in the cman_node_t type.
@@ -40,11 +41,8 @@ pthread_mutex_t status_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_rwlock_t resource_lock = PTHREAD_RWLOCK_INITIALIZER;
void res_build_name(char *, size_t, resource_t *);
-int get_rg_state_local(char *, rg_state_t *);
-int group_migratory(char *groupname, int lock);
-int _group_property(char *groupname, char *property, char *ret, size_t len);
-int restart_threshold_exceeded(restart_counter_t arg);
-
+static int _group_property(const char *groupname, const char *property,
+ char *ret, size_t len);
struct status_arg {
msgctx_t *ctx;
@@ -59,7 +57,7 @@ struct status_arg {
*/
int
node_should_start_safe(uint32_t nodeid, cluster_member_list_t *membership,
- char *rg_name)
+ const char *rg_name)
{
int ret;
@@ -133,7 +131,7 @@ count_resource_groups(cluster_member_list_t *ml)
++mp->cn_svccount;
- val = res_attr_value(res, "exclusive");
+ val = (char *)res_attr_value(res, "exclusive");
if (val && ((!strcmp(val, "yes") ||
(atoi(val)>0))) ) {
++mp->cn_svcexcl;
@@ -149,7 +147,7 @@ count_resource_groups(cluster_member_list_t *ml)
static inline int
is_exclusive_res(resource_t *res)
{
- char *val;
+ const char *val;
val = res_attr_value(res, "exclusive");
if (val && ((!strcmp(val, "yes") ||
@@ -162,7 +160,7 @@ is_exclusive_res(resource_t *res)
/* Locked exported function */
int
-is_exclusive(char *svcName)
+is_exclusive(const char *svcName)
{
int ret = 0;
resource_t *res = NULL;
@@ -180,8 +178,8 @@ is_exclusive(char *svcName)
}
-resource_node_t *
-node_by_ref(resource_node_t **tree, char *name)
+static resource_node_t *
+node_by_ref(resource_node_t **tree, const char *name)
{
resource_t *res;
resource_node_t *node, *ret = NULL;
@@ -267,7 +265,8 @@ have_exclusive_resources(void)
int
-check_exclusive_resources(cluster_member_list_t *membership, char *svcName)
+check_exclusive_resources(cluster_member_list_t *membership,
+ const char *svcName)
{
cman_node_t *mp;
int exclusive, count, excl;
@@ -303,7 +302,7 @@ check_exclusive_resources(cluster_member_list_t *membership, char *svcName)
*/
uint32_t
best_target_node(cluster_member_list_t *allowed, uint32_t owner,
- char *rg_name, int lock)
+ const char *rg_name, int lock)
{
int x;
int highscore = 1;
@@ -343,7 +342,7 @@ best_target_node(cluster_member_list_t *allowed, uint32_t owner,
it's an exclusive service and the target node already
is running a service. */
res = find_root_by_ref(&_resources, rg_name);
- val = res_attr_value(res, "exclusive");
+ val = (char *)res_attr_value(res, "exclusive");
exclusive = val && ((!strcmp(val, "yes") || (atoi(val)>0)));
if (lock)
@@ -377,7 +376,7 @@ best_target_node(cluster_member_list_t *allowed, uint32_t owner,
int
check_depend(resource_t *res)
{
- char *val;
+ const char *val;
rg_state_t rs;
val = res_attr_value(res, "depend");
@@ -393,7 +392,7 @@ check_depend(resource_t *res)
int
-check_depend_safe(char *rg_name)
+check_depend_safe(const char *rg_name)
{
resource_t *res;
int ret;
@@ -410,8 +409,8 @@ check_depend_safe(char *rg_name)
}
-int
-check_rdomain_crash(char *svcName)
+static int
+check_rdomain_crash(const char *svcName)
{
int *nodes = NULL, nodecount = 0;
int *fd_nodes = NULL, fd_nodecount = 0, fl = 0;
@@ -458,7 +457,7 @@ out_free:
If it is running and we're a better member to run it, then ask for
it.
*/
-void
+static void
consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus,
cluster_member_list_t *membership)
{
@@ -489,7 +488,7 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus,
autostart is disabled. If it is, leave it stopped */
if (svcStatus->rs_state == RG_STATE_STOPPED &&
svcStatus->rs_transition == 0) {
- val = res_attr_value(node->rn_resource, "autostart");
+ val = (char *)res_attr_value(node->rn_resource, "autostart");
autostart = !(val && ((!strcmp(val, "no") ||
(atoi(val)==0))));
if (!autostart) {
@@ -536,7 +535,7 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus,
return;
}
- val = res_attr_value(node->rn_resource, "exclusive");
+ val = (char *)res_attr_value(node->rn_resource, "exclusive");
exclusive = val && ((!strcmp(val, "yes") || (atoi(val)>0)));
if (exclusive && mp->cn_svccount) {
@@ -571,8 +570,8 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus,
}
-void
-consider_relocate(char *svcName, rg_state_t *svcStatus, uint32_t nodeid,
+static void
+consider_relocate(const char *svcName, rg_state_t *svcStatus, uint32_t nodeid,
cluster_member_list_t *membership)
{
int a, b, req = RG_RELOCATE;
@@ -727,7 +726,7 @@ eval_groups(int local, uint32_t nodeid, int nodeStatus)
rg_unlock(&lockp);
if (svcStatus.rs_owner == 0)
- nodeName = "none";
+ nodeName = (char *)"none";
else
nodeName = memb_id_to_name(membership,
svcStatus.rs_owner);
@@ -787,7 +786,7 @@ eval_groups(int local, uint32_t nodeid, int nodeStatus)
* @see eval_groups
*/
int
-group_event(char __attribute__ ((unused)) *rg_name,
+group_event(const char __attribute__ ((unused)) *rg_name,
uint32_t state,
int __attribute__ ((unused)) owner)
{
@@ -820,7 +819,7 @@ group_event(char __attribute__ ((unused)) *rg_name,
continue;
if (svcStatus.rs_owner == 0)
- nodeName = "none";
+ nodeName = (char *)"none";
else
nodeName = memb_id_to_name(membership,
svcStatus.rs_owner);
@@ -885,7 +884,7 @@ group_event(char __attribute__ ((unused)) *rg_name,
Tells us if a resource group can be migrated.
*/
int
-group_migratory(char *groupname, int lock)
+group_migratory(const char *groupname, int lock)
{
resource_node_t *rn;
resource_t *res;
@@ -1086,8 +1085,9 @@ out:
@param len Length of buffer pointed to by ret
@return 0 on success, -1 on failure.
*/
-int
-_group_property(char *groupname, char *property, char *ret, size_t len)
+static int
+_group_property(const char *groupname, const char *property,
+ char *ret, size_t len)
{
resource_t *res = NULL;
int x = 0;
@@ -1109,7 +1109,8 @@ _group_property(char *groupname, char *property, char *ret, size_t len)
int
-group_property(char *groupname, char *property, char *ret_val, size_t len)
+group_property(const char *groupname, const char *property,
+ char *ret_val, size_t len)
{
int ret = -1;
pthread_rwlock_rdlock(&resource_lock);
@@ -1126,7 +1127,7 @@ group_property(char *groupname, char *property, char *ret_val, size_t len)
@param rgname Resource group name whose state we want to send.
@see send_rg_states
*/
-void
+static void
send_rg_state(msgctx_t *ctx, char *rgname, int fast)
{
rg_state_msg_t msg, *msgp = &msg;
@@ -1249,7 +1250,7 @@ send_rg_states(msgctx_t *ctx, int fast)
int
-svc_exists(char *svcname)
+svc_exists(const char *svcname)
{
resource_node_t *node;
int ret = 0;
@@ -1273,7 +1274,8 @@ svc_exists(char *svcname)
void
-rg_doall(int request, int block, char __attribute__ ((unused)) *debugfmt)
+rg_doall(int request, int block,
+ const char __attribute__ ((unused)) *debugfmt)
{
resource_node_t *curr;
rg_state_t svcblk;
@@ -1317,7 +1319,7 @@ rg_doall(int request, int block, char __attribute__ ((unused)) *debugfmt)
/**
Stop changed resources.
*/
-void *
+static void *
q_status_checks(void __attribute__ ((unused)) *arg)
{
resource_node_t *curr;
@@ -1382,7 +1384,7 @@ do_status_checks(void)
/**
Stop changed resources.
*/
-void
+static void
do_condstops(void)
{
resource_node_t *curr;
@@ -1445,7 +1447,7 @@ cont:
/**
Start changed resources.
*/
-void
+static void
do_condstarts(void)
{
resource_node_t *curr;
@@ -1543,7 +1545,7 @@ do_condstarts(void)
}
/* Set it up for an auto-start */
- val = res_attr_value(curr->rn_resource, "autostart");
+ val = (char *)res_attr_value(curr->rn_resource, "autostart");
autostart = !(val && ((!strcmp(val, "no") ||
(atoi(val)==0))));
if (autostart)
@@ -1730,10 +1732,10 @@ init_resource_groups(int reconfigure, int do_init)
void
-get_recovery_policy(char *rg_name, char *buf, size_t buflen)
+get_recovery_policy(const char *rg_name, char *buf, size_t buflen)
{
resource_t *res;
- char *val;
+ const char *val;
pthread_rwlock_rdlock(&resource_lock);
@@ -1751,11 +1753,12 @@ get_recovery_policy(char *rg_name, char *buf, size_t buflen)
int
-get_service_property(char *rg_name, char *prop, char *buf, size_t buflen)
+get_service_property(const char *rg_name, const char *prop,
+ char *buf, size_t buflen)
{
int ret = 0;
resource_t *res;
- char *val;
+ const char *val;
memset(buf, 0, buflen);
@@ -1805,7 +1808,7 @@ get_service_property(char *rg_name, char *prop, char *buf, size_t buflen)
int
-add_restart(char *rg_name)
+add_restart(const char *rg_name)
{
resource_node_t *node;
int ret = 1;
@@ -1822,7 +1825,7 @@ add_restart(char *rg_name)
int
-check_restart(char *rg_name)
+check_restart(const char *rg_name)
{
resource_node_t *node;
int ret = 0;
diff --git a/rgmanager/src/daemons/reslist.c b/rgmanager/src/daemons/reslist.c
index b327245..1a1f0dc 100644
--- a/rgmanager/src/daemons/reslist.c
+++ b/rgmanager/src/daemons/reslist.c
@@ -35,7 +35,7 @@ res_build_name(char *buf, size_t buflen, resource_t *res)
@return value of attribute or NULL if not found
*/
char *
-res_attr_value(resource_t *res, char *attrname)
+res_attr_value(resource_t *res, const char *attrname)
{
resource_attr_t *ra;
int x;
@@ -295,7 +295,7 @@ find_resource_by_ref(resource_t **reslist, char *type, char *ref)
@return Resource matching type/ref or NULL if none.
*/
resource_t *
-find_root_by_ref(resource_t **reslist, char *ref)
+find_root_by_ref(resource_t **reslist, const char *ref)
{
resource_t *curr;
char ref_buf[128];
diff --git a/rgmanager/src/daemons/rg_event.c b/rgmanager/src/daemons/rg_event.c
index 1c1f195..08404c6 100644
--- a/rgmanager/src/daemons/rg_event.c
+++ b/rgmanager/src/daemons/rg_event.c
@@ -343,9 +343,6 @@ out:
}
-
-void group_event(char *name, uint32_t state, int owner);
-
/**
Event handling function. This only stays around as long as
events are on the queue.
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 9e13e21..3e8c97b 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -19,30 +19,15 @@
#include <msgsimple.h>
#include <res-ocf.h>
#include <event.h>
+#include <groups.h>
/* XXX - copied :( */
#define cn_svccount cn_address.cna_address[0] /* Theses are uint8_t size */
#define cn_svcexcl cn_address.cna_address[1]
-int node_should_start_safe(uint32_t, cluster_member_list_t *, char *);
-
-int next_node_id(cluster_member_list_t *membership, int me);
-
-int rg_exec_script(char *rgname, char *script, char *action);
-static int _svc_stop_finish(char *svcName, int failed, uint32_t newstate);
-
-int set_rg_state(char *servicename, rg_state_t *svcblk);
-int get_rg_state(char *servicename, rg_state_t *svcblk);
-void get_recovery_policy(char *rg_name, char *buf, size_t buflen);
-int check_depend_safe(char *servicename);
-int group_migratory(char *servicename, int lock);
-int have_exclusive_resources(void);
-int check_exclusive_resources(cluster_member_list_t *membership, char *svcName);
static int msvc_check_cluster(char *svcName);
static inline int handle_started_status(char *svcName, int ret, rg_state_t *svcStatus);
static inline int handle_migrate_status(char *svcName, int ret, rg_state_t *svcStatus);
-int count_resource_groups_local(cman_node_t *mp);
-int is_exclusive(char *svcName);
int
@@ -156,9 +141,9 @@ svc_report_failure(char *svcName)
int
#ifdef DEBUG
-_rg_lock(char *name, struct dlm_lksb *p)
+_rg_lock(const char *name, struct dlm_lksb *p)
#else
-rg_lock(char *name, struct dlm_lksb *p)
+rg_lock(const char *name, struct dlm_lksb *p)
#endif
{
char res[256];
@@ -170,7 +155,7 @@ rg_lock(char *name, struct dlm_lksb *p)
#ifdef DEBUG
int
-_rg_lock_dbg(char *name, struct dlm_lksb *p, char *file, int line)
+_rg_lock_dbg(const char *name, struct dlm_lksb *p, const char *file, int line)
{
dbg_printf("rg_lock(%s) @ %s:%d\n", name, file, line);
return _rg_lock(name, p);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-06-22 13:49 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-22 13:49 cluster: STABLE3 - rgmanager: groups.c cleanup Lon Hohberger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).