semctl requires the use of the semun union to work without segfault.

Regards
-steve
Index: lib/util.c
===================================================================
--- lib/util.c	(revision 1887)
+++ lib/util.c	(working copy)
@@ -264,6 +264,16 @@
 	return (0);
 }
 	
+	
+#if defined(_SEM_SEMUN_UNDEFINED)
+union semun {
+	int val;
+	struct semid_ds *buf;
+	unsigned short int *array;
+	struct seminfo *__buf;
+};
+#endif
+
 SaAisErrorT
 openais_service_connect (
 	enum service_types service,
@@ -278,6 +288,7 @@
 	int res;
 	mar_req_setup_t req_setup;
 	mar_res_setup_t res_setup;
+	union semun semun;
 
 	res_setup.error = SA_AIS_ERR_LIBRARY;
 
@@ -336,16 +347,22 @@
 		goto error_exit;
 	}
 	
-	res = semctl (ipc_segment->semid, 0, SETVAL, 0);
+	semun.val = 0;
+	res = semctl (ipc_segment->semid, 0, SETVAL, semun);
 	if (res != 0) {
 		goto error_exit;
 	}
 
-	res = semctl (ipc_segment->semid, 1, SETVAL, 0);
+	res = semctl (ipc_segment->semid, 1, SETVAL, semun);
 	if (res != 0) {
 		goto error_exit;
 	}
 
+	res = semctl (ipc_segment->semid, 2, SETVAL, semun);
+	if (res != 0) {
+		goto error_exit;
+	}
+
 	req_setup.shmkey = shmkey;
 	req_setup.semkey = semkey;
 	req_setup.service = service;
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to