open_ais_service_connect creates SYS V semaphores and shms.
If system limit for semaphores/shms is exceeded code looped
in endless cycle.
Now ENOSPC is correctly handled and SA_AIS_ERR_NO_SPACE is
returned to lib user.
---
branches/whitetank/lib/util.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/branches/whitetank/lib/util.c b/branches/whitetank/lib/util.c
index f285eb5..d5c26c2 100644
--- a/branches/whitetank/lib/util.c
+++ b/branches/whitetank/lib/util.c
@@ -339,6 +339,11 @@ openais_service_connect (
shmkey = random();
ipc_segment->shmid = shmget (shmkey, sizeof (struct
shared_memory),
IPC_CREAT|IPC_EXCL|0600);
+
+ if (ipc_segment->shmid == -1 && errno == ENOSPC) {
+ res_setup.error = SA_AIS_ERR_NO_SPACE;
+ goto error_exit;
+ }
} while (ipc_segment->shmid == -1);
/*
@@ -348,6 +353,11 @@ openais_service_connect (
semkey = random();
ipc_segment->semid = semget (semkey, 3,
IPC_CREAT|IPC_EXCL|0600);
ipc_segment->euid = geteuid ();
+
+ if (ipc_segment->semid == -1 && errno == ENOSPC) {
+ res_setup.error = SA_AIS_ERR_NO_SPACE;
+ goto error_exit;
+ }
} while (ipc_segment->semid == -1);
/*
--
1.5.5.6
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais