Просмотр исходного кода

Repair loading of external services.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1540 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 18 лет назад
Родитель
Сommit
39d574d0bb
1 измененных файлов с 43 добавлено и 10 удалено
  1. 43 10
      exec/service.c

+ 43 - 10
exec/service.c

@@ -66,10 +66,6 @@ static struct default_service default_services[] = {
 		.name			 = "openais_amf",
 		.name			 = "openais_amf",
 		.ver			 = 0,
 		.ver			 = 0,
 	},
 	},
-	{
-		.name			 = "openais_ckpt",
-		.ver			 = 0,
-	},
 	{
 	{
 		.name			 = "openais_evt",
 		.name			 = "openais_evt",
 		.ver			 = 0,
 		.ver			 = 0,
@@ -94,10 +90,6 @@ static struct default_service default_services[] = {
 		.name			 = "openais_confdb",
 		.name			 = "openais_confdb",
 		.ver			 = 0,
 		.ver			 = 0,
 	},
 	},
-	{
-		.name			 = "lha_crm",
-		.ver			 = 0,
-	}
 };
 };
 
 
 struct openais_service_handler *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
 struct openais_service_handler *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
@@ -331,9 +323,50 @@ unsigned int openais_service_defaults_link_and_init (struct objdb_iface_ver0 *ob
 {
 {
 	unsigned int i;
 	unsigned int i;
 
 
-	if (default_services_requested (objdb) == 0) {
-		return (0);
+	unsigned int object_service_handle;
+	char *found_service_name;
+	char *found_service_ver;
+	unsigned int found_service_ver_atoi;
+ 
+	objdb->object_find_reset (OBJECT_PARENT_HANDLE);
+	while (objdb->object_find (
+		OBJECT_PARENT_HANDLE,
+		"service",
+		strlen ("service"),
+		&object_service_handle) == 0) {
+
+		objdb->object_key_get (object_service_handle,
+			"name",
+			strlen ("name"),
+			(void *)&found_service_name,
+			NULL);
+
+		objdb->object_key_get (object_service_handle,
+			"ver",
+			strlen ("ver"),
+			(void *)&found_service_ver,
+			NULL);
+
+		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,
+			found_service_ver_atoi);
 	}
 	}
+
+ 	if (default_services_requested (objdb) == 0) {
+ 		return (0);
+ 	}
 	for (i = 0;
 	for (i = 0;
 		i < sizeof (default_services) / sizeof (struct default_service); i++) {
 		i < sizeof (default_services) / sizeof (struct default_service); i++) {