Send Linux-ha-cvs mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Linux-ha-cvs digest..."


Today's Topics:

   1. Linux-HA CVS: lrm by alan from  ([email protected])
   2. Linux-HA CVS: lrm by alan from  ([email protected])
   3. Linux-HA CVS: mgmt by zhenh from 
      ([email protected])


----------------------------------------------------------------------

Message: 1
Date: Tue, 27 Dec 2005 14:02:45 -0700 (MST)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: lrm by alan from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : alan
Host    : 
Project : linux-ha
Module  : lrm

Dir     : linux-ha/lrm/lrmd


Modified Files:
        lrmd.c 


Log Message:
Got rid of the static "first_line" variable - it was shared by all operations
which clearly won't work.

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/lrmd/lrmd.c,v
retrieving revision 1.198
retrieving revision 1.199
diff -u -3 -r1.198 -r1.199
--- lrmd.c      27 Dec 2005 16:59:15 -0000      1.198
+++ lrmd.c      27 Dec 2005 21:02:44 -0000      1.199
@@ -1,4 +1,4 @@
-/* $Id: lrmd.c,v 1.198 2005/12/27 16:59:15 alan Exp $ */
+/* $Id: lrmd.c,v 1.199 2005/12/27 21:02:44 alan Exp $ */
 /*
  * Local Resource Manager Daemon
  *
@@ -3245,8 +3245,6 @@
 static gboolean
 handle_pipe_ra_stdout(int fd, gpointer user_data)
 {
-       /* FIXME!!  THIS CANNOT BE A STATIC - you need one per RA! */
-       static gboolean first_line = TRUE;
        gboolean rc = TRUE;
        lrmd_op_t* op = (lrmd_op_t *)user_data;
        const char* op_type = NULL; 
@@ -3274,12 +3272,14 @@
                        lrmd_log(LOG_INFO, "RA output: (%s:%s:stdout) %s"
                                , op->rsc_id, op_type, data);
                }
-               if (first_line == TRUE) {
-                       memset(op->first_line_ra_stdout, 0
-                               , sizeof(op->first_line_ra_stdout));
+               /*
+                * This isn't quite correct yet - there is no idea of a "line"
+                * in the code as it's presently written...
+                * but it probably works OK for now...
+                */
+               if (op->first_line_ra_stdout[0] == EOS) {
                        strncpy(op->first_line_ra_stdout, data
-                               , sizeof(op->first_line_ra_stdout) - 1);
-                       first_line = FALSE;
+                       ,       sizeof(op->first_line_ra_stdout) - 1);
                }
                g_free(data);
        }
@@ -3464,6 +3464,10 @@
 }
 /*
  * $Log: lrmd.c,v $
+ * Revision 1.199  2005/12/27 21:02:44  alan
+ * Got rid of the static "first_line" variable - it was shared by all 
operations
+ * which clearly won't work.
+ *
  * Revision 1.198  2005/12/27 16:59:15  alan
  * Put in a note about a bug in the form of a FIXME
  * I can't fix it right this minute.  Sorry...




------------------------------

Message: 2
Date: Tue, 27 Dec 2005 15:35:08 -0700 (MST)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: lrm by alan from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : alan
Host    : 
Project : linux-ha
Module  : lrm

Dir     : linux-ha/lrm/lrmd


Modified Files:
        lrmd.c 


Log Message:
Changed one message to not come out except at higher debug levels or in case of 
error.

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/lrmd/lrmd.c,v
retrieving revision 1.199
retrieving revision 1.200
diff -u -3 -r1.199 -r1.200
--- lrmd.c      27 Dec 2005 21:02:44 -0000      1.199
+++ lrmd.c      27 Dec 2005 22:35:07 -0000      1.200
@@ -1,4 +1,4 @@
-/* $Id: lrmd.c,v 1.199 2005/12/27 21:02:44 alan Exp $ */
+/* $Id: lrmd.c,v 1.200 2005/12/27 22:35:07 alan Exp $ */
 /*
  * Local Resource Manager Daemon
  *
@@ -3127,8 +3127,10 @@
                        " return code %d (mapped from %d)"
                        ,       op_info(op), p->pid, rc, exitcode);
                }
-               lrmd_log(LOG_INFO, "Resource Agent output: [%s]"
-               ,       op->first_line_ra_stdout);
+               if (rc != EXECRA_OK || debug_level > 1) {
+                       lrmd_log(LOG_INFO, "Resource Agent output: [%s]"
+                       ,       op->first_line_ra_stdout);
+               }
        }
        if (EXECRA_EXEC_UNKNOWN_ERROR == rc || EXECRA_NO_RA == rc) {
                if (HA_OK != ha_msg_mod_int(op->msg, F_LRM_OPSTATUS,
@@ -3464,6 +3466,9 @@
 }
 /*
  * $Log: lrmd.c,v $
+ * Revision 1.200  2005/12/27 22:35:07  alan
+ * Changed one message to not come out except at higher debug levels or in 
case of error.
+ *
  * Revision 1.199  2005/12/27 21:02:44  alan
  * Got rid of the static "first_line" variable - it was shared by all 
operations
  * which clearly won't work.




------------------------------

Message: 3
Date: Wed, 28 Dec 2005 08:13:35 -0700 (MST)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: mgmt by zhenh from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : zhenh
Host    : 
Project : linux-ha
Module  : mgmt

Dir     : linux-ha/mgmt/daemon


Modified Files:
        mgmt_crm.c 


Log Message:
change the way of using pe_working_set_t to avoid memory leak
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/mgmt/daemon/mgmt_crm.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- mgmt_crm.c  22 Dec 2005 07:21:18 -0000      1.6
+++ mgmt_crm.c  28 Dec 2005 15:13:35 -0000      1.7
@@ -83,14 +83,15 @@
 static resource_t* find_resource(GList* rsc_list, const char* id);
 static int delete_object(const char* type, const char* entry, const char* id);
 static GList* find_xml_node_list(crm_data_t *root, const char *search_path);
-static pe_working_set_t get_data_set(void);
 static int refresh_lrm(IPC_Channel *crmd_channel, const char *host_uname);
 static int delete_lrm_rsc(IPC_Channel *crmd_channel, const char *host_uname, 
const char *rsc_id);
+static pe_working_set_t* get_data_set(void);
+static void free_data_set(pe_working_set_t* data_set);
 
 #define GET_RESOURCE() if (argc != 2) {                                        
\
                                return cl_strdup(MSG_FAIL);                     
\
                        }                                                       
\
-                       rsc = find_resource(data_set.resources, argv[1]);       
\
+                       rsc = find_resource(data_set->resources, argv[1]);      
\
                        if (rsc == NULL) {                                      
\
                                return cl_strdup(MSG_FAIL);                     
\
                        }
@@ -152,22 +153,25 @@
        return 0;
 }
 
-pe_working_set_t 
-get_data_set(void) {
-       static crm_data_t* cib_xml_copy = NULL;
-       pe_working_set_t data_set;
-       
-       set_working_set_defaults(&data_set);
-       if (cib_xml_copy) {
-               ha_msg_del(cib_xml_copy);
-       }
-       cib_xml_copy = get_cib_copy(cib_conn);
-       data_set.input = cib_xml_copy;
-       data_set.now = new_ha_date(TRUE);
-       stage0(&data_set);
+pe_working_set_t*
+get_data_set(void) 
+{
+       pe_working_set_t* data_set;
+       
+       data_set = (pe_working_set_t*)cl_malloc(sizeof(pe_working_set_t));
+       set_working_set_defaults(data_set);
+       data_set->input = get_cib_copy(cib_conn);
+       data_set->now = new_ha_date(TRUE);
+       stage0(data_set);
        return data_set;
 }
 
+void 
+free_data_set(pe_working_set_t* data_set)
+{
+       cleanup_calculations(data_set);
+       cl_free(data_set);
+}      
 
 /* mgmtd functions */
 int
@@ -257,15 +261,15 @@
 on_get_crm_config(char* argv[], int argc)
 {
        char buf [255];
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        char* ret = cl_strdup(MSG_OK);
        data_set = get_data_set();
        
-       ret = mgmt_msg_append(ret, data_set.transition_idle_timeout);
-       ret = mgmt_msg_append(ret, data_set.symmetric_cluster?"True":"False");
-       ret = mgmt_msg_append(ret, data_set.stonith_enabled?"True":"False");
+       ret = mgmt_msg_append(ret, data_set->transition_idle_timeout);
+       ret = mgmt_msg_append(ret, data_set->symmetric_cluster?"True":"False");
+       ret = mgmt_msg_append(ret, data_set->stonith_enabled?"True":"False");
        
-       switch (data_set.no_quorum_policy) {
+       switch (data_set->no_quorum_policy) {
                case no_quorum_freeze:
                        ret = mgmt_msg_append(ret, "freeze");
                        break;
@@ -276,9 +280,10 @@
                        ret = mgmt_msg_append(ret, "ignore");
                        break;
        }
-       snprintf(buf, 255, "%d", data_set.default_resource_stickiness);
+       snprintf(buf, 255, "%d", data_set->default_resource_stickiness);
        ret = mgmt_msg_append(ret, buf);
-       ret = mgmt_msg_append(ret, data_set.have_quorum?"True":"False");
+       ret = mgmt_msg_append(ret, data_set->have_quorum?"True":"False");
+       free_data_set(data_set);
        return ret;
 }
 char*
@@ -317,10 +322,10 @@
        node_t* node;
        GList* cur;
        char* ret;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
-       cur = data_set.nodes;
+       cur = data_set->nodes;
        ret = cl_strdup(MSG_OK);
        while (cur != NULL) {
                node = (node_t*) cur->data;
@@ -329,20 +334,23 @@
                }
                cur = g_list_next(cur);
        }
+       free_data_set(data_set);
        return ret;
 }
 
 char* 
 on_get_dc(char* argv[], int argc)
 {
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
-       if (data_set.dc_node != NULL) {
+       if (data_set->dc_node != NULL) {
                char* ret = cl_strdup(MSG_OK);
-               ret = mgmt_msg_append(ret, data_set.dc_node->details->uname);
+               ret = mgmt_msg_append(ret, data_set->dc_node->details->uname);
+               free_data_set(data_set);
                return ret;
        }
+       free_data_set(data_set);
        return cl_strdup(MSG_FAIL);
 }
 
@@ -352,30 +360,33 @@
 {
        node_t* node;
        GList* cur;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
-       cur = data_set.nodes;
+       cur = data_set->nodes;
        ARGC_CHECK(2);
        while (cur != NULL) {
                node = (node_t*) cur->data;
-               if (node->details->online) {
-                       if (strncmp(argv[1],node->details->uname,MAX_STRLEN) == 
0) {
-                               char* ret = cl_strdup(MSG_OK);
-                               ret = mgmt_msg_append(ret, 
node->details->uname);
-                               ret = mgmt_msg_append(ret, 
node->details->online?"True":"False");
-                               ret = mgmt_msg_append(ret, 
node->details->standby?"True":"False");
-                               ret = mgmt_msg_append(ret, 
node->details->unclean?"True":"False");
-                               ret = mgmt_msg_append(ret, 
node->details->shutdown?"True":"False");
-                               ret = mgmt_msg_append(ret, 
node->details->expected_up?"True":"False");
-                               ret = mgmt_msg_append(ret, 
node->details->is_dc?"True":"False");
-                               ret = mgmt_msg_append(ret, 
node->details->type==node_ping?"ping":"member");
-
-                               return ret;
-                       }
+               if (!node->details->online) {
+                       cur = g_list_next(cur);
+                       continue;
+               }
+               if (strncmp(argv[1],node->details->uname,MAX_STRLEN) == 0) {
+                       char* ret = cl_strdup(MSG_OK);
+                       ret = mgmt_msg_append(ret, node->details->uname);
+                       ret = mgmt_msg_append(ret, 
node->details->online?"True":"False");
+                       ret = mgmt_msg_append(ret, 
node->details->standby?"True":"False");
+                       ret = mgmt_msg_append(ret, 
node->details->unclean?"True":"False");
+                       ret = mgmt_msg_append(ret, 
node->details->shutdown?"True":"False");
+                       ret = mgmt_msg_append(ret, 
node->details->expected_up?"True":"False");
+                       ret = mgmt_msg_append(ret, 
node->details->is_dc?"True":"False");
+                       ret = mgmt_msg_append(ret, 
node->details->type==node_ping?"ping":"member");
+                       free_data_set(data_set);
+                       return ret;
                }
                cur = g_list_next(cur);
        }
+       free_data_set(data_set);
        return cl_strdup(MSG_FAIL);
 }
 
@@ -384,10 +395,10 @@
 {
        node_t* node;
        GList* cur;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
-       cur = data_set.nodes;
+       cur = data_set->nodes;
        ARGC_CHECK(2);
        while (cur != NULL) {
                node = (node_t*) cur->data;
@@ -401,11 +412,13 @@
                                        ret = mgmt_msg_append(ret, rsc->id);
                                        cur_rsc = g_list_next(cur_rsc);
                                }
+                               free_data_set(data_set);
                                return ret;
                        }
                }
                cur = g_list_next(cur);
        }
+       free_data_set(data_set);
        return cl_strdup(MSG_FAIL);
 }
 /* resource functions */
@@ -419,7 +432,7 @@
        crm_data_t* cib_object = NULL;
        crm_data_t* output;
        char xml[MAX_STRLEN];
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -446,9 +459,10 @@
                        snprintf(xml, MAX_STRLEN, "<master_slave id=\"%s\"/>", 
rsc->id);
                        break;
                default:
+                       free_data_set(data_set);
                        return cl_strdup(MSG_FAIL);
        }
-                       
+       free_data_set(data_set);
 
        cib_object = string2xml(xml);
        if(cib_object == NULL) {
@@ -462,7 +476,6 @@
                return cl_strdup(MSG_FAIL);
        }
 
-       
        return cl_strdup(MSG_OK);
 }
 static int
@@ -678,16 +691,17 @@
 {
        GList* cur;
        char* ret;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        ret = cl_strdup(MSG_OK);
-       cur = data_set.resources;
+       cur = data_set->resources;
        while (cur != NULL) {
                resource_t* rsc = (resource_t*)cur->data;
                ret = mgmt_msg_append(ret, rsc->id);
                cur = g_list_next(cur);
        }
+       free_data_set(data_set);
        return ret;
 }
 /* basic information of resource */
@@ -697,7 +711,7 @@
        resource_t* rsc;
        char* ret;
        struct ha_msg* attrs;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -708,6 +722,7 @@
        ret = mgmt_msg_append(ret, ha_msg_value(attrs, "class"));
        ret = mgmt_msg_append(ret, ha_msg_value(attrs, "provider"));
        ret = mgmt_msg_append(ret, ha_msg_value(attrs, "type"));
+       free_data_set(data_set);
        return ret;
 }
 
@@ -717,7 +732,7 @@
        resource_t* rsc;
        char* ret;
        GList* cur;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -729,6 +744,7 @@
                ret = mgmt_msg_append(ret, node->details->uname);
                cur = g_list_next(cur);
        }
+       free_data_set(data_set);
        return ret;
 }
 char*
@@ -736,7 +752,7 @@
 {
        resource_t* rsc;
        char* ret;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -772,6 +788,7 @@
                        ret = mgmt_msg_append(ret, "master");
                        break;
        }
+       free_data_set(data_set);
        return ret;
 }
 
@@ -780,7 +797,7 @@
 {
        resource_t* rsc;
        char* ret;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -804,7 +821,7 @@
                        ret = mgmt_msg_append(ret, "master");
                        break;
        }
-
+       free_data_set(data_set);
        return ret;
 }
 /* FIXME: following two structures is copied from CRM */
@@ -848,7 +865,7 @@
        resource_t* rsc;
        char* ret;
        GList* cur = NULL;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -866,6 +883,7 @@
                ret = mgmt_msg_append(ret, rsc->id);
                cur = g_list_next(cur);
        }
+       free_data_set(data_set);
        return ret;
 }
 
@@ -878,7 +896,7 @@
        char* ret;
        struct ha_msg* attrs;
        struct ha_msg* nvpair;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -886,10 +904,12 @@
        ret = cl_strdup(MSG_OK);
        attrs = cl_get_struct((struct ha_msg*)rsc->xml, "instance_attributes");
        if(attrs == NULL) {
+               free_data_set(data_set);
                return ret;
        }
        attrs = cl_get_struct(attrs, "attributes");
        if(attrs == NULL) {
+               free_data_set(data_set);
                return ret;
        }
        for (i = 0; i < attrs->nfields; i++) {
@@ -900,6 +920,7 @@
                        ret = mgmt_msg_append(ret, ha_msg_value(nvpair, 
"value"));
                }
        }
+       free_data_set(data_set);
        return ret;
 }
 char*
@@ -957,7 +978,7 @@
        char* ret;
        struct ha_msg* ops;
        struct ha_msg* op;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -965,6 +986,7 @@
        ret = cl_strdup(MSG_OK);
        ops = cl_get_struct((struct ha_msg*)rsc->xml, "operations");
        if (ops == NULL) {
+               free_data_set(data_set);
                return ret;
        }
        for (i = 0; i < ops->nfields; i++) {
@@ -976,6 +998,7 @@
                        ret = mgmt_msg_append(ret, ha_msg_value(op, "timeout"));
                }
        }
+       free_data_set(data_set);
        return ret;
 }
 char*
@@ -1032,7 +1055,7 @@
        char* ret;
        clone_variant_data_t* clone_data;
        char buf[MAX_STRLEN];
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -1045,6 +1068,7 @@
        ret = mgmt_msg_append(ret, buf);
        snprintf(buf, MAX_STRLEN, "%d", clone_data->clone_node_max);
        ret = mgmt_msg_append(ret, buf);
+       free_data_set(data_set);
        return ret;
 }
 char*
@@ -1086,7 +1110,7 @@
        const char * master_max_s;
        const char * master_node_max_s;
        char buf[MAX_STRLEN];
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        
        data_set = get_data_set();
        GET_RESOURCE()
@@ -1104,6 +1128,7 @@
        ret = mgmt_msg_append(ret, buf);
        ret = mgmt_msg_append(ret, master_max_s);
        ret = mgmt_msg_append(ret, master_node_max_s);
+       free_data_set(data_set);
        return ret;
 }
 char*
@@ -1147,14 +1172,15 @@
        GList* list;
        GList* cur;
        crm_data_t* cos = NULL;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        const char* path[] = {"configuration","constraints"}
        
        ARGC_CHECK(2);
        
        data_set = get_data_set();
-       cos = find_xml_node_nested(data_set.input, path, 2);
+       cos = find_xml_node_nested(data_set->input, path, 2);
        if (cos == NULL) {
+               free_data_set(data_set);
                return  cl_strdup(MSG_FAIL);
        }
        ret = cl_strdup(MSG_OK);
@@ -1167,6 +1193,7 @@
                cur = g_list_next(cur);
        }
        g_list_free(list);
+       free_data_set(data_set);
        return ret;
 }
 
@@ -1180,13 +1207,14 @@
        
        GList* expr_list, *expr_cur;
        crm_data_t* cos = NULL;
-       pe_working_set_t data_set;
+       pe_working_set_t* data_set;
        const char* path[] = {"configuration","constraints"}
        ARGC_CHECK(3);
        
        data_set = get_data_set();
-       cos = find_xml_node_nested(data_set.input, path, 2);
+       cos = find_xml_node_nested(data_set->input, path, 2);
        if (cos == NULL) {
+               free_data_set(data_set);
                return  cl_strdup(MSG_FAIL);
        }
        ret = cl_strdup(MSG_OK);
@@ -1229,6 +1257,7 @@
                cur = g_list_next(cur);
        }
        g_list_free(list);
+       free_data_set(data_set);
        return ret;
 }
 char*




------------------------------

_______________________________________________
Linux-ha-cvs mailing list
[email protected]
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs


End of Linux-ha-cvs Digest, Vol 25, Issue 73
********************************************

Reply via email to