Send Linux-ha-cvs mailing list submissions to
        linux-ha-cvs@lists.linux-ha.org

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: crm by andrew from 
      (linux-ha-cvs@lists.linux-ha.org)
   2. Linux-HA CVS: crm by andrew from 
      (linux-ha-cvs@lists.linux-ha.org)
   3. Linux-HA CVS: crm by andrew from 
      (linux-ha-cvs@lists.linux-ha.org)


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

Message: 1
Date: Fri,  7 Jul 2006 02:22:44 -0600 (MDT)
From: linux-ha-cvs@lists.linux-ha.org
Subject: [Linux-ha-cvs] Linux-HA CVS: crm by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : crm

Dir     : linux-ha/crm/cib


Modified Files:
        callbacks.c 


Log Message:
Free the existing CIB at shutdown

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/cib/callbacks.c,v
retrieving revision 1.132
retrieving revision 1.133
diff -u -3 -r1.132 -r1.133
--- callbacks.c 6 Jul 2006 16:52:15 -0000       1.132
+++ callbacks.c 7 Jul 2006 08:22:43 -0000       1.133
@@ -1,4 +1,4 @@
-/* $Id: callbacks.c,v 1.132 2006/07/06 16:52:15 andrew Exp $ */
+/* $Id: callbacks.c,v 1.133 2006/07/07 08:22:43 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -1930,6 +1930,7 @@
                
        } else {
                crm_err("%s: No heartbeat connection", caller);
+               uninitializeCib();
                exit(LSB_EXIT_OK);
        }
 }




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

Message: 2
Date: Fri,  7 Jul 2006 02:23:32 -0600 (MDT)
From: linux-ha-cvs@lists.linux-ha.org
Subject: [Linux-ha-cvs] Linux-HA CVS: crm by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : crm

Dir     : linux-ha/crm/cib


Modified Files:
        io.c 


Log Message:
Fix potential memory leak of op disgest result

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/cib/io.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -3 -r1.75 -r1.76
--- io.c        6 Jul 2006 13:30:24 -0000       1.75
+++ io.c        7 Jul 2006 08:23:32 -0000       1.76
@@ -1,4 +1,4 @@
-/* $Id: io.c,v 1.75 2006/07/06 13:30:24 andrew Exp $ */
+/* $Id: io.c,v 1.76 2006/07/07 08:23:32 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -101,10 +101,6 @@
        gboolean passed = FALSE;
        FILE *expected_strm = NULL;
        int start = 0, length = 0, read_len = 0;
-
-       if(local_cib != NULL) {
-               digest = calculate_xml_digest(local_cib, FALSE);
-       }
        
        s_res = stat(CIB_FILENAME ".sig", &buf);
        
@@ -113,6 +109,10 @@
                return TRUE;
        }
 
+       if(local_cib != NULL) {
+               digest = calculate_xml_digest(local_cib, FALSE);
+       }
+       
        expected_strm = fopen(CIB_FILENAME ".sig", "r");
        start  = ftell(expected_strm);
        fseek(expected_strm, 0L, SEEK_END);
@@ -152,9 +152,9 @@
        CRM_ASSERT(digest_strm != NULL);
 
        if(digest == NULL) {
-               digest = calculate_xml_digest(local_cib, FALSE);
+               local_digest = calculate_xml_digest(local_cib, FALSE);
                CRM_ASSERT(digest != NULL);
-               local_digest = digest;
+               digest = local_digest;
        }
        
        rc = fprintf(digest_strm, "%s", digest);




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

Message: 3
Date: Fri,  7 Jul 2006 02:29:35 -0600 (MDT)
From: linux-ha-cvs@lists.linux-ha.org
Subject: [Linux-ha-cvs] Linux-HA CVS: crm by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : crm

Dir     : linux-ha/crm/cib


Modified Files:
        callbacks.c cibio.h io.c main.c 


Log Message:
Implement an option (-f) that instructs the CIB to:
 - read the (complete) CIB from disk before an operation
 - write the (complete) CIB to disk after each operation
 - deallocate the in-memory copy of the CIB after each operation
Aids debugging of memory leaks and should never be used in production

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/cib/callbacks.c,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -3 -r1.133 -r1.134
--- callbacks.c 7 Jul 2006 08:22:43 -0000       1.133
+++ callbacks.c 7 Jul 2006 08:29:34 -0000       1.134
@@ -1,4 +1,4 @@
-/* $Id: callbacks.c,v 1.133 2006/07/07 08:22:43 andrew Exp $ */
+/* $Id: callbacks.c,v 1.134 2006/07/07 08:29:34 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -1232,7 +1232,7 @@
        crm_data_t *output   = NULL;
        crm_data_t *input    = NULL;
 
-       crm_data_t *current_cib = the_cib;
+       crm_data_t *current_cib = NULL;
        crm_data_t *result_cib  = NULL;
        
        int call_type      = 0;
@@ -1247,6 +1247,11 @@
 
        *reply = NULL;
        *cib_diff = NULL;
+       if(per_action_cib) {
+               CRM_CHECK(the_cib == NULL, free_xml(the_cib));
+               the_cib = readCibXmlFile(CIB_FILENAME, FALSE);
+       }
+       current_cib = the_cib;
        
        /* Start processing the request... */
        op = cl_get_string(request, F_CIB_OPERATION);
@@ -1262,6 +1267,7 @@
 
        if(cib_status != cib_ok) {
                *reply = cib_construct_reply(request, the_cib, cib_status);
+               uninitializeCib();
                return cib_status;
        }
        
@@ -1364,6 +1370,7 @@
        if(call_type >= 0) {
                cib_server_ops[call_type].cleanup(op, &input, &output);
        }
+       uninitializeCib();
        return rc;
 }
 
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/cib/cibio.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- cibio.h     4 Jul 2006 14:07:42 -0000       1.17
+++ cibio.h     7 Jul 2006 08:29:34 -0000       1.18
@@ -1,4 +1,4 @@
-/* $Id: cibio.h,v 1.17 2006/07/04 14:07:42 andrew Exp $ */
+/* $Id: cibio.h,v 1.18 2006/07/07 08:29:34 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -34,6 +34,7 @@
 #include <crm/common/xml.h>
 
 extern gboolean initialized;
+extern gboolean per_action_cib;
 extern crm_data_t *the_cib;
 extern crm_data_t *node_search;
 extern crm_data_t *resource_search;
@@ -48,7 +49,7 @@
 extern crm_data_t *createEmptyCib(void);
 extern gboolean verifyCibXml(crm_data_t *cib);
 extern crm_data_t *readCibXml(char *buffer);
-extern crm_data_t *readCibXmlFile(const char *filename);
+extern crm_data_t *readCibXmlFile(const char *filename, gboolean 
discard_status);
 extern int activateCibBuffer(char *buffer, const char *filename);
 extern int activateCibXml(crm_data_t *doc, const char *filename);
 
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/cib/io.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -3 -r1.76 -r1.77
--- io.c        7 Jul 2006 08:23:32 -0000       1.76
+++ io.c        7 Jul 2006 08:29:34 -0000       1.77
@@ -1,4 +1,4 @@
-/* $Id: io.c,v 1.76 2006/07/07 08:23:32 andrew Exp $ */
+/* $Id: io.c,v 1.77 2006/07/07 08:29:34 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -204,7 +204,7 @@
  * It is the callers responsibility to free the output of this function
  */
 crm_data_t*
-readCibXmlFile(const char *filename)
+readCibXmlFile(const char *filename, gboolean discard_status)
 {
        int s_res = -1;
        struct stat buf;
@@ -264,15 +264,18 @@
                        return NULL;
        }
 
+       status = find_xml_node(root, XML_CIB_TAG_STATUS, FALSE);
+       if(root != NULL && discard_status && status != NULL) {
+               /* strip out the status section if there is one */
+               free_xml_from_parent(root, status);
+               status = NULL;
+       }
+       if(status == NULL) {
+               create_xml_node(root, XML_CIB_TAG_STATUS);              
+       }
+       
        /* Do this before DTD validation happens */
        if(root != NULL) {
-               /* strip out the status section if there is one */
-               status = find_xml_node(root, XML_CIB_TAG_STATUS, FALSE);
-               if(status != NULL) {
-                       free_xml_from_parent(root, status);
-               }
-               create_xml_node(root, XML_CIB_TAG_STATUS);
-               
                /* fill in some defaults */
                name = XML_ATTR_GENERATION_ADMIN;
                value = crm_element_value(root, name);
@@ -506,7 +509,7 @@
 activateCibXml(crm_data_t *new_cib, const char *ignored)
 {
        int error_code = cib_ok;
-       crm_data_t *saved_cib = get_the_CIB();
+       crm_data_t *saved_cib = the_cib;
        const char *ignore_dtd = NULL;
 
        long new_bytes, new_allocs, new_frees;
@@ -551,6 +554,12 @@
                                 " version to revert to");
                }
                
+       } else if(per_action_cib && cib_writes_enabled && cib_status == cib_ok) 
{
+               write_cib_contents(the_cib);
+               uninitializeCib();
+               free_xml(saved_cib);
+               return error_code;
+               
        } else if(cib_writes_enabled && cib_status == cib_ok) {
                crm_debug_2("Triggering CIB write");
                G_main_set_trigger(cib_writer);
@@ -629,13 +638,16 @@
         *
         * So delete the status section before we write it out
         */
-       cib_status_root = find_xml_node(the_cib, XML_CIB_TAG_STATUS, TRUE);
-       CRM_DEV_ASSERT(cib_status_root != NULL);
-       
-       if(cib_status_root != NULL) {
-               free_xml_from_parent(the_cib, cib_status_root);
+       if(p == NULL) {
+               cib_status_root = find_xml_node(
+                       the_cib, XML_CIB_TAG_STATUS, TRUE);
+               CRM_DEV_ASSERT(cib_status_root != NULL);
+               
+               if(cib_status_root != NULL) {
+                       free_xml_from_parent(the_cib, cib_status_root);
+               }
        }
-
+       
        rc = write_xml_file(the_cib, CIB_FILENAME, FALSE);
        if(rc <= 0) {
                crm_err("Changes couldn't be written to disk");
@@ -659,7 +671,11 @@
                exit(LSB_EXIT_GENERIC);
        }
 #endif
-       exit(LSB_EXIT_OK);
+       if(p == NULL) {
+               exit(LSB_EXIT_OK);
+       }
+       
+       crm_free(digest);
        return HA_OK;
 }
 
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/cib/main.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- main.c      6 Jul 2006 16:52:16 -0000       1.49
+++ main.c      7 Jul 2006 08:29:34 -0000       1.50
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.49 2006/07/06 16:52:16 andrew Exp $ */
+/* $Id: main.c,v 1.50 2006/07/07 08:29:34 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -55,6 +55,7 @@
 
 gboolean cib_shutdown_flag = FALSE;
 gboolean stand_alone = FALSE;
+gboolean per_action_cib = FALSE;
 enum cib_errors cib_status = cib_ok;
 
 extern void oc_ev_special(const oc_ev_t *, oc_ev_class_t , int );
@@ -77,7 +78,7 @@
 ll_cluster_t *hb_conn = NULL;
 GTRIGSource *cib_writer = NULL;
 
-#define OPTARGS        "hVs"
+#define OPTARGS        "hVsf"
 
 static void
 cib_diskwrite_complete(gpointer userdata, int status, int signo, int exitcode)
@@ -128,6 +129,9 @@
                        case 'h':               /* Help message */
                                usage(crm_system_name, LSB_EXIT_OK);
                                break;
+                       case 'f':
+                               per_action_cib = TRUE;
+                               break;
                        default:
                                ++argerr;
                                break;
@@ -495,7 +499,8 @@
 gboolean
 startCib(const char *filename)
 {
-       crm_data_t *cib = readCibXmlFile(filename);
+       gboolean active = FALSE;
+       crm_data_t *cib = readCibXmlFile(filename, TRUE);
 
        if(cib == NULL) {
                crm_warn("Cluster configuration not found: %s."
@@ -507,10 +512,10 @@
                crm_xml_add(cib, XML_ATTR_NUMUPDATES, "0");
        }
        
-       if(activateCibXml(cib, filename) != 0) {
-               return FALSE;
+       if(activateCibXml(cib, filename) == 0) {
+               active = TRUE;
+               crm_info("CIB Initialization completed successfully");
        }
-
-       crm_info("CIB Initialization completed successfully");
-       return TRUE;
+       
+       return active;
 }




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

_______________________________________________
Linux-ha-cvs mailing list
Linux-ha-cvs@lists.linux-ha.org
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs


End of Linux-ha-cvs Digest, Vol 32, Issue 29
********************************************

Reply via email to