Explorar o código

libqb: only init IPC on service engines that need it.

Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
Reviewed-by: Steven Dake <sdake@redhat.com>
Angus Salkeld %!s(int64=15) %!d(string=hai) anos
pai
achega
17a4e6d9e5
Modificáronse 1 ficheiros con 13 adicións e 4 borrados
  1. 13 4
      exec/ipc_glue.c

+ 13 - 4
exec/ipc_glue.c

@@ -203,7 +203,9 @@ static int32_t cs_ipcs_connection_accept (qb_ipcs_connection_t *c, uid_t euid, g
 	struct list_head *iter;
 	int32_t service = qb_ipcs_service_id_get(c);
 
-	if (ais_service[service] == NULL || ais_service_exiting[service]) {
+	if (ais_service[service] == NULL ||
+		ais_service_exiting[service] ||
+		ipcs_mapper[service].inst == NULL) {
 		return -ENOSYS;
 	}
 
@@ -570,7 +572,7 @@ static void cs_ipcs_check_for_flow_control(void)
 	int32_t fc_enabled;
 
 	for (i = 0; i < SERVICE_HANDLER_MAXIMUM_COUNT; i++) {
-		if (ais_service[i] == NULL) {
+		if (ais_service[i] == NULL || ipcs_mapper[i].inst == NULL) {
 			continue;
 		}
 		fc_enabled = QB_TRUE;
@@ -643,7 +645,7 @@ void cs_ipcs_stats_update(void)
 	struct cs_ipcs_conn_context *cnx;
 
 	for (i = 0; i < SERVICE_HANDLER_MAXIMUM_COUNT; i++) {
-		if (ais_service[i] == NULL) {
+		if (ais_service[i] == NULL || ipcs_mapper[i].inst == NULL) {
 			continue;
 		}
 		qb_ipcs_stats_get(ipcs_mapper[i].inst, &srv_stats, QB_FALSE);
@@ -689,9 +691,16 @@ void cs_ipcs_stats_update(void)
 
 void cs_ipcs_service_init(struct corosync_service_engine *service)
 {
+	if (service->lib_engine_count == 0) {
+		log_printf (LOGSYS_LEVEL_DEBUG,
+			"NOT Initializing IPC on %s [%d]",
+			cs_ipcs_serv_short_name(service->id),
+			service->id);
+		return;
+	}
 	ipcs_mapper[service->id].id = service->id;
 	strcpy(ipcs_mapper[service->id].name, cs_ipcs_serv_short_name(service->id));
-	log_printf (LOGSYS_LEVEL_INFO,
+	log_printf (LOGSYS_LEVEL_DEBUG,
 		"Initializing IPC on %s [%d]",
 		ipcs_mapper[service->id].name,
 		ipcs_mapper[service->id].id);