summaryrefslogtreecommitdiff
path: root/sem_init.c
diff options
context:
space:
mode:
authorrpj <rpj>2004-10-22 15:06:41 +0000
committerrpj <rpj>2004-10-22 15:06:41 +0000
commit045278e11b53fc1ad59945427feab1cd9275988f (patch)
treeda8570a7a8962d9563814c4910e8a9d5fb6fa685 /sem_init.c
parentf84df26e12431bb9ecd07fbc52c804538635901f (diff)
Changes to mutexes and semaphores - considered alpha for now
Diffstat (limited to 'sem_init.c')
-rw-r--r--sem_init.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/sem_init.c b/sem_init.c
index af0e285..fb596ae 100644
--- a/sem_init.c
+++ b/sem_init.c
@@ -128,17 +128,27 @@ sem_init (sem_t * sem, int pshared, unsigned int value)
#else /* NEED_SEM */
s->value = value;
- s->sem = CreateSemaphore (NULL, /* Always NULL */
- (long) 0, /* Force threads to wait */
- (long) _POSIX_SEM_VALUE_MAX, /* Maximum value */
- NULL); /* Name */
-
- if (0 == s->sem)
+ if (pthread_mutex_init(&s->lock, NULL) == 0)
+ {
+ if ((s->sem = CreateSemaphore (NULL, /* Always NULL */
+ (long) 0, /* Force threads to wait */
+ (long) _POSIX_SEM_VALUE_MAX, /* Maximum value */
+ NULL)) == 0) /* Name */
+ {
+ (void) pthread_mutex_destroy(&s->lock);
+ result = ENOSPC;
+ }
+ }
+ else
{
- free (s);
result = ENOSPC;
}
+ if (result != 0)
+ {
+ free(s);
+ }
+
#endif /* NEED_SEM */
}