I have not witnessed this error, but it was reported on the mailing list
and I am speculating this patch will resolve the problem.
Andrew can you give it a run?
Thanks
-steve
Index: exec/service.c
===================================================================
--- exec/service.c (revision 1546)
+++ exec/service.c (working copy)
@@ -99,6 +99,9 @@
struct openais_service_handler *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
+static unsigned int object_internal_configuration_handle;
+
+
static unsigned int default_services_requested (struct objdb_iface_ver0 *objdb)
{
unsigned int object_service_handle;
@@ -138,7 +141,7 @@
unsigned int handle;
struct openais_service_handler *service;
unsigned int res;
- unsigned int object_handle;
+ unsigned int object_service_handle;
/*
* reference the service interface
@@ -176,30 +179,30 @@
/*
* Store service in object database
*/
- objdb->object_create (OBJECT_PARENT_HANDLE,
- &object_handle,
+ objdb->object_create (object_internal_configuration_handle,
+ &object_service_handle,
"service",
strlen ("service"));
- objdb->object_key_create (object_handle,
+ objdb->object_key_create (object_service_handle,
"name",
strlen ("name"),
service_name,
strlen (service_name) + 1);
- objdb->object_key_create (object_handle,
+ objdb->object_key_create (object_service_handle,
"ver",
strlen ("ver"),
&service_ver,
sizeof (service_ver));
- res = objdb->object_key_create (object_handle,
+ res = objdb->object_key_create (object_service_handle,
"handle",
strlen ("handle"),
&handle,
sizeof (handle));
- objdb->object_key_create (object_handle,
+ objdb->object_key_create (object_service_handle,
"service_id",
strlen ("service_id"),
&service->id,
@@ -209,7 +212,7 @@
return (res);
}
-static int openais_service_unlink_common(
+static int openais_service_unlink_common (
struct objdb_iface_ver0 *objdb,
unsigned int object_service_handle,
const char *service_name,
@@ -218,21 +221,22 @@
unsigned int res;
unsigned short *service_id;
unsigned int *found_service_handle;
+
res = objdb->object_key_get (object_service_handle,
- "handle",
- strlen ("handle"),
- (void *)&found_service_handle,
- NULL);
+ "handle",
+ strlen ("handle"),
+ (void *)&found_service_handle,
+ NULL);
res = objdb->object_key_get (object_service_handle,
- "service_id",
- strlen ("service_id"),
- (void *)&service_id,
- NULL);
+ "service_id",
+ strlen ("service_id"),
+ (void *)&service_id,
+ NULL);
log_printf(LOG_LEVEL_NOTICE, "Unloading openais component: %s v%u\n",
- service_name, service_version);
-
+ service_name, service_version);
+
if (ais_service[*service_id]->exec_exit_fn) {
ais_service[*service_id]->exec_exit_fn (objdb);
}
@@ -251,9 +255,8 @@
char *found_service_name;
unsigned int *found_service_ver;
- objdb->object_find_reset (OBJECT_PARENT_HANDLE);
while (objdb->object_find (
- OBJECT_PARENT_HANDLE,
+ object_internal_configuration_handle,
"service",
strlen ("service"),
&object_service_handle) == 0) {
@@ -275,8 +278,11 @@
*/
if ((strcmp (service_name, found_service_name) == 0) &&
(service_ver == *found_service_ver)) {
- res = openais_service_unlink_common(
- objdb, object_service_handle, service_name, service_ver);
+
+ res = openais_service_unlink_common (
+ objdb, object_service_handle,
+ service_name, service_ver);
+
objdb->object_destroy (object_service_handle);
return res;
}
@@ -293,11 +299,12 @@
log_printf(LOG_LEVEL_NOTICE, "Unloading all openais components\n");
- objdb->object_find_reset (OBJECT_PARENT_HANDLE);
- while (objdb->object_find (OBJECT_PARENT_HANDLE,
- "service",
- strlen ("service"),
- &object_service_handle) == 0) {
+ objdb->object_find_reset (object_internal_configuration_handle);
+
+ while (objdb->object_find (object_internal_configuration_handle,
+ "service",
+ strlen ("service"),
+ &object_service_handle) == 0) {
objdb->object_key_get (object_service_handle,
"name",
@@ -311,11 +318,11 @@
(void *)&service_ver,
NULL);
- openais_service_unlink_common(
+ openais_service_unlink_common (
objdb, object_service_handle, service_name, *service_ver);
objdb->object_destroy (object_service_handle);
- objdb->object_find_reset (OBJECT_PARENT_HANDLE);
+ objdb->object_find_reset (object_internal_configuration_handle);
}
return (0);
@@ -333,7 +340,13 @@
char *found_service_ver;
unsigned int found_service_ver_atoi;
+ objdb->object_create (OBJECT_PARENT_HANDLE,
+ &object_internal_configuration_handle,
+ "internal_configuration",
+ strlen ("internal_configuration"));
+
objdb->object_find_reset (OBJECT_PARENT_HANDLE);
+
while (objdb->object_find (
OBJECT_PARENT_HANDLE,
"service",
@@ -354,15 +367,6 @@
found_service_ver_atoi = atoi (found_service_ver);
- objdb->object_key_replace (
- object_service_handle,
- "ver",
- strlen ("ver"),
- found_service_ver,
- strlen (found_service_ver),
- &found_service_ver_atoi,
- sizeof (found_service_ver_atoi));
-
openais_service_link_and_init (
objdb,
found_service_name,
Index: exec/service.h
===================================================================
--- exec/service.h (revision 1546)
+++ exec/service.h (working copy)
@@ -90,9 +90,9 @@
* Link and initialize a service
*/
extern unsigned int openais_service_link_and_init (
- struct objdb_iface_ver0 *objdb,
- char *service_name,
- unsigned int service_ver);
+ struct objdb_iface_ver0 *objdb,
+ char *service_name,
+ unsigned int service_ver);
/*
* Unlink and exit a service
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais