From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10925 invoked by alias); 27 Feb 2009 09:13:09 -0000 Received: (qmail 10917 invoked by alias); 27 Feb 2009 09:13:08 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64,SPF_HELO_PASS X-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion.fedora.phx.redhat.com Subject: cluster: STABLE3 - libccs: cope with new hdb from corosync To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/STABLE3 X-Git-Reftype: branch X-Git-Oldrev: f3cbe8016eda42244099d1c562e5b11eee809b9b X-Git-Newrev: 42cc800dde95d9376026c910b55280b7c305d85b From: "Fabio M. Di Nitto" Message-Id: <20090227091244.02D89120332@lists.fedorahosted.org> Date: Fri, 27 Feb 2009 09:13:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q1/txt/msg00590.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=42cc800dde95d9376026c910b55280b7c305d85b Commit: 42cc800dde95d9376026c910b55280b7c305d85b Parent: f3cbe8016eda42244099d1c562e5b11eee809b9b Author: Fabio M. Di Nitto AuthorDate: Fri Feb 27 10:11:54 2009 +0100 Committer: Fabio M. Di Nitto CommitterDate: Fri Feb 27 10:11:54 2009 +0100 libccs: cope with new hdb from corosync fix also exit paths to close connections and avoid leaking semaphores. Signed-off-by: Fabio M. Di Nitto --- config/libs/libccsconfdb/ccs_internal.h | 14 +++--- config/libs/libccsconfdb/fullxpath.c | 10 ++-- config/libs/libccsconfdb/libccs.c | 78 +++++++++++++++++-------------- config/libs/libccsconfdb/xpathlite.c | 16 +++--- 4 files changed, 63 insertions(+), 55 deletions(-) diff --git a/config/libs/libccsconfdb/ccs_internal.h b/config/libs/libccsconfdb/ccs_internal.h index d61e521..fd8d037 100644 --- a/config/libs/libccsconfdb/ccs_internal.h +++ b/config/libs/libccsconfdb/ccs_internal.h @@ -4,22 +4,22 @@ /* NOTE: use __attribute__ to hide the internal API */ /* from libccs.c */ -void reset_iterator(confdb_handle_t handle, unsigned int connection_handle) +void reset_iterator(confdb_handle_t handle, hdb_handle_t connection_handle) __attribute__ ((visibility("hidden"))); -int get_previous_query(confdb_handle_t handle, unsigned int connection_handle, - char *previous_query, unsigned int *query_handle) +int get_previous_query(confdb_handle_t handle, hdb_handle_t connection_handle, + char *previous_query, hdb_handle_t *query_handle) __attribute__ ((visibility("hidden"))); -int set_previous_query(confdb_handle_t handle, unsigned int connection_handle, - char *previous_query, unsigned int query_handle) +int set_previous_query(confdb_handle_t handle, hdb_handle_t connection_handle, + char *previous_query, hdb_handle_t query_handle) __attribute__ ((visibility("hidden"))); /* from xpathlite.c */ -char *_ccs_get_xpathlite(confdb_handle_t handle, unsigned int connection_handle, +char *_ccs_get_xpathlite(confdb_handle_t handle, hdb_handle_t connection_handle, const char *query, int list) __attribute__ ((visibility("hidden"))); /* from fullxpath.c */ -char *_ccs_get_fullxpath(confdb_handle_t handle, unsigned int connection_handle, +char *_ccs_get_fullxpath(confdb_handle_t handle, hdb_handle_t connection_handle, const char *query, int list) __attribute__ ((visibility("hidden"))); int xpathfull_init(confdb_handle_t handle) diff --git a/config/libs/libccsconfdb/fullxpath.c b/config/libs/libccsconfdb/fullxpath.c index 38f56c2..77736a1 100644 --- a/config/libs/libccsconfdb/fullxpath.c +++ b/config/libs/libccsconfdb/fullxpath.c @@ -45,10 +45,10 @@ static int add_to_buffer(char *data, char **buffer, int *bufsize) } static int dump_objdb_buff(confdb_handle_t dump_handle, - unsigned int parent_object_handle, char **buffer, + hdb_handle_t parent_object_handle, char **buffer, int *bufsize) { - unsigned int object_handle; + hdb_handle_t object_handle; char temp[PATH_MAX]; char object_name[PATH_MAX]; int object_name_len; @@ -106,7 +106,7 @@ static int dump_objdb_buff(confdb_handle_t dump_handle, confdb_object_iter(dump_handle, parent_object_handle, &object_handle, object_name, &object_name_len)) == CS_OK) { - unsigned int parent; + hdb_handle_t parent; res = confdb_object_parent_get(dump_handle, object_handle, @@ -218,13 +218,13 @@ void xpathfull_finish() * * Returns: char * to result or NULL in case of failure. */ -char *_ccs_get_fullxpath(confdb_handle_t handle, unsigned int connection_handle, +char *_ccs_get_fullxpath(confdb_handle_t handle, hdb_handle_t connection_handle, const char *query, int list) { xmlXPathObjectPtr obj = NULL; char realquery[PATH_MAX + 16]; char previous_query[PATH_MAX]; - unsigned int list_handle = 0; + hdb_handle_t list_handle = 0; unsigned int xmllistindex = 0; int prev = 0; char *rtn = NULL; diff --git a/config/libs/libccsconfdb/libccs.c b/config/libs/libccsconfdb/libccs.c index d78fc26..760368c 100644 --- a/config/libs/libccsconfdb/libccs.c +++ b/config/libs/libccsconfdb/libccs.c @@ -50,9 +50,9 @@ static int confdb_disconnect(confdb_handle_t handle) return 0; } -static unsigned int find_libccs_handle(confdb_handle_t handle) +static hdb_handle_t find_libccs_handle(confdb_handle_t handle) { - unsigned int libccs_handle = 0; + hdb_handle_t libccs_handle = 0; if (confdb_object_find_start(handle, OBJECT_PARENT_HANDLE) != CS_OK) { errno = ENOMEM; @@ -71,10 +71,10 @@ static unsigned int find_libccs_handle(confdb_handle_t handle) return libccs_handle; } -static unsigned int find_ccs_handle(confdb_handle_t handle, int ccs_handle) +static hdb_handle_t find_ccs_handle(confdb_handle_t handle, int ccs_handle) { int res, datalen = 0, found = 0; - unsigned int libccs_handle = 0, connection_handle = 0; + hdb_handle_t libccs_handle = 0, connection_handle = 0; char data[128]; libccs_handle = find_libccs_handle(handle); @@ -112,7 +112,7 @@ static unsigned int find_ccs_handle(confdb_handle_t handle, int ccs_handle) } static int destroy_ccs_handle(confdb_handle_t handle, - unsigned int connection_handle) + hdb_handle_t connection_handle) { if (confdb_object_destroy(handle, connection_handle) != CS_OK) { errno = EINVAL; @@ -124,7 +124,7 @@ static int destroy_ccs_handle(confdb_handle_t handle, static int get_running_config_version(confdb_handle_t handle, int *config_version) { - unsigned int cluster_handle; + hdb_handle_t cluster_handle; char data[128]; int datalen = 0; int ret = -1; @@ -155,7 +155,7 @@ static int get_running_config_version(confdb_handle_t handle, int *config_versio } static int get_stored_config_version(confdb_handle_t handle, - unsigned int connection_handle, int *config_version) + hdb_handle_t connection_handle, int *config_version) { char data[128]; int datalen = 0; @@ -175,7 +175,7 @@ static int get_stored_config_version(confdb_handle_t handle, } static int set_stored_config_version(confdb_handle_t handle, - unsigned int connection_handle, int new_version) + hdb_handle_t connection_handle, int new_version) { char temp[PATH_MAX]; int templen = 0; @@ -199,12 +199,12 @@ static int set_stored_config_version(confdb_handle_t handle, } static int config_reload(confdb_handle_t handle, - unsigned int connection_handle, int fullxpathint) + hdb_handle_t connection_handle, int fullxpathint) { int running_version; int stored_version; - if(get_running_config_version(handle, &running_version) < 0) + if (get_running_config_version(handle, &running_version) < 0) return -1; if (get_stored_config_version(handle, connection_handle, &stored_version) < 0) @@ -230,10 +230,10 @@ static int config_reload(confdb_handle_t handle, return 0; } -static unsigned int create_ccs_handle(confdb_handle_t handle, int ccs_handle, +static hdb_handle_t create_ccs_handle(confdb_handle_t handle, int ccs_handle, int fullxpath) { - unsigned int libccs_handle = 0, connection_handle = 0; + hdb_handle_t libccs_handle = 0, connection_handle = 0; char buf[128]; int config_version = 0; #ifdef EXPERIMENTAL_BUILD @@ -302,12 +302,12 @@ static unsigned int create_ccs_handle(confdb_handle_t handle, int ccs_handle, return connection_handle; } -static unsigned int get_ccs_handle(confdb_handle_t handle, int *ccs_handle, +static hdb_handle_t get_ccs_handle(confdb_handle_t handle, int *ccs_handle, int fullxpath) { unsigned int next_handle; - unsigned int libccs_handle = 0; - unsigned int ret = 0; + hdb_handle_t libccs_handle = 0; + hdb_handle_t ret = 0; libccs_handle = find_libccs_handle(handle); if (libccs_handle == -1) @@ -331,8 +331,8 @@ static unsigned int get_ccs_handle(confdb_handle_t handle, int *ccs_handle, return -1; } -int get_previous_query(confdb_handle_t handle, unsigned int connection_handle, - char *previous_query, unsigned int *query_handle) +int get_previous_query(confdb_handle_t handle, hdb_handle_t connection_handle, + char *previous_query, hdb_handle_t *query_handle) { int datalen; @@ -350,12 +350,12 @@ int get_previous_query(confdb_handle_t handle, unsigned int connection_handle, return -1; } -int set_previous_query(confdb_handle_t handle, unsigned int connection_handle, - char *previous_query, unsigned int query_handle) +int set_previous_query(confdb_handle_t handle, hdb_handle_t connection_handle, + char *previous_query, hdb_handle_t query_handle) { char temp[PATH_MAX]; int templen; - unsigned int temphandle; + hdb_handle_t temphandle; if (confdb_key_get (handle, connection_handle, "previous_query", @@ -387,8 +387,8 @@ int set_previous_query(confdb_handle_t handle, unsigned int connection_handle, if (confdb_key_replace (handle, connection_handle, "query_handle", strlen("query_handle"), &temphandle, - sizeof(unsigned int), &query_handle, - sizeof(unsigned int)) != CS_OK) { + sizeof(hdb_handle_t), &query_handle, + sizeof(hdb_handle_t)) != CS_OK) { errno = ENOMEM; return -1; } @@ -397,7 +397,7 @@ int set_previous_query(confdb_handle_t handle, unsigned int connection_handle, if (confdb_key_create (handle, connection_handle, "query_handle", strlen("query_handle"), &query_handle, - sizeof(unsigned int)) != CS_OK) { + sizeof(hdb_handle_t)) != CS_OK) { errno = ENOMEM; return -1; } @@ -410,7 +410,7 @@ int set_previous_query(confdb_handle_t handle, unsigned int connection_handle, if (confdb_key_create (handle, connection_handle, "iterator_tracker", strlen("iterator_tracker"), &temphandle, - sizeof(unsigned int)) != CS_OK) { + sizeof(hdb_handle_t)) != CS_OK) { errno = ENOMEM; return -1; } @@ -419,7 +419,7 @@ int set_previous_query(confdb_handle_t handle, unsigned int connection_handle, return 0; } -void reset_iterator(confdb_handle_t handle, unsigned int connection_handle) +void reset_iterator(confdb_handle_t handle, hdb_handle_t connection_handle) { unsigned int value = 0; @@ -439,7 +439,7 @@ void reset_iterator(confdb_handle_t handle, unsigned int connection_handle) static int clean_stalled_ccs_handles(confdb_handle_t handle) { int datalen = 0; - unsigned int libccs_handle = 0, connection_handle = 0; + hdb_handle_t libccs_handle = 0, connection_handle = 0; time_t current_time, stored_time; libccs_handle = find_libccs_handle(handle); @@ -474,7 +474,7 @@ static int clean_stalled_ccs_handles(confdb_handle_t handle) static int check_cluster_name(int ccs_handle, const char *cluster_name) { confdb_handle_t handle = 0; - unsigned int cluster_handle; + hdb_handle_t cluster_handle; char data[128]; int found = 0, datalen = 0; @@ -529,30 +529,32 @@ static int check_cluster_name(int ccs_handle, const char *cluster_name) static int _ccs_get(int desc, const char *query, char **rtn, int list) { confdb_handle_t handle = 0; - unsigned int connection_handle = 0; + hdb_handle_t connection_handle = 0; char data[128]; int datalen = 0; int fullxpathint = 0; + *rtn = NULL; + handle = confdb_connect(); if (handle < 0) return -1; connection_handle = find_ccs_handle(handle, desc); if (connection_handle == -1) - return -1; + goto fail; memset(data, 0, sizeof(data)); if (confdb_key_get (handle, connection_handle, "fullxpath", strlen("fullxpath"), &data, &datalen) != CS_OK) { errno = EINVAL; - return -1; + goto fail; } else fullxpathint = atoi(data); if (config_reload(handle, connection_handle, fullxpathint) < 0) - return -1; + goto fail; if (!fullxpathint) *rtn = @@ -561,6 +563,7 @@ static int _ccs_get(int desc, const char *query, char **rtn, int list) *rtn = _ccs_get_fullxpath(handle, connection_handle, query, list); +fail: confdb_disconnect(handle); if (!*rtn) @@ -645,7 +648,7 @@ int ccs_force_connect(const char *cluster_name, int blocking) int ccs_disconnect(int desc) { confdb_handle_t handle = 0; - unsigned int connection_handle = 0; + hdb_handle_t connection_handle = 0; int ret; char data[128]; int datalen = 0; @@ -656,15 +659,18 @@ int ccs_disconnect(int desc) return handle; connection_handle = find_ccs_handle(handle, desc); - if (connection_handle == -1) - return -1; + if (connection_handle == -1) { + ret = -1; + goto fail; + } memset(data, 0, sizeof(data)); if (confdb_key_get (handle, connection_handle, "fullxpath", strlen("fullxpath"), &data, &datalen) != CS_OK) { errno = EINVAL; - return -1; + ret = -1; + goto fail; } else fullxpathint = atoi(data); @@ -672,6 +678,8 @@ int ccs_disconnect(int desc) xpathfull_finish(); ret = destroy_ccs_handle(handle, connection_handle); + +fail: confdb_disconnect(handle); return ret; } diff --git a/config/libs/libccsconfdb/xpathlite.c b/config/libs/libccsconfdb/xpathlite.c index 90558b9..855a323 100644 --- a/config/libs/libccsconfdb/xpathlite.c +++ b/config/libs/libccsconfdb/xpathlite.c @@ -53,12 +53,12 @@ static int tokenizer(char *current_query) * return 0 on success * return -1 on errors */ -static int path_dive(confdb_handle_t handle, unsigned int *query_handle, +static int path_dive(confdb_handle_t handle, hdb_handle_t *query_handle, char *current_query, int tokens) { char *pos = NULL, *next = NULL; int i; - unsigned int new_obj_handle; + hdb_handle_t new_obj_handle; pos = current_query + 1; @@ -218,8 +218,8 @@ fail: return -1; } -static int get_data(confdb_handle_t handle, unsigned int connection_handle, - unsigned int query_handle, unsigned int *list_handle, +static int get_data(confdb_handle_t handle, hdb_handle_t connection_handle, + hdb_handle_t query_handle, hdb_handle_t *list_handle, char **rtn, char *curpos, int list, int is_oldlist) { int datalen, cmp; @@ -227,7 +227,7 @@ static int get_data(confdb_handle_t handle, unsigned int connection_handle, char resval[PATH_MAX]; char keyval[PATH_MAX]; int keyvallen = PATH_MAX; - unsigned int new_obj_handle; + hdb_handle_t new_obj_handle; unsigned int value = 0; memset(data, 0, PATH_MAX); @@ -361,14 +361,14 @@ fail: * * Returns: char * to result or NULL in case of failure. */ -char *_ccs_get_xpathlite(confdb_handle_t handle, unsigned int connection_handle, +char *_ccs_get_xpathlite(confdb_handle_t handle, hdb_handle_t connection_handle, const char *query, int list) { char current_query[PATH_MAX]; char *datapos, *rtn = NULL; char previous_query[PATH_MAX]; - unsigned int list_handle = 0; - unsigned int query_handle = 0; + hdb_handle_t list_handle = 0; + hdb_handle_t query_handle = 0; int prev = 0, is_oldlist = 0; int tokens, i;