X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f0d406118f42093c818f66253e4b8aaa60a7f002..7a5846ae0f17bbb8f9a0c907f36f15afa92cf73f:/src/xbt/xbt_os_thread.c diff --git a/src/xbt/xbt_os_thread.c b/src/xbt/xbt_os_thread.c index e8c86e3c0e..f34fb398e1 100644 --- a/src/xbt/xbt_os_thread.c +++ b/src/xbt/xbt_os_thread.c @@ -137,7 +137,11 @@ void xbt_os_thread_mod_postexit(void) int xbt_os_thread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)) { +#ifdef WIN32 + THROW_UNIMPLEMENTED; //pthread_atfork is not implemented in pthread.h on windows +#else return pthread_atfork(prepare, parent, child); +#endif } static void *wrapper_start_routine(void *s) @@ -149,7 +153,7 @@ static void *wrapper_start_routine(void *s) THROWF(system_error, errcode, "pthread_setspecific failed for xbt_self_thread_key"); - void *res = (*(t->start_routine)) (t->param); + void *res = t->start_routine(t->param); if (t->detached) xbt_os_thread_free_thread_data(t); return res; @@ -495,7 +499,7 @@ xbt_os_sem_t xbt_os_sem_init(unsigned int value) if ((res->ps == (sem_t *) SEM_FAILED) && (errno == ENAMETOOLONG)) { /* Old darwins only allow 13 chars. Did you create *that* amount of semaphores? */ res->name[13] = '\0'; - res->ps = sem_open(res->name, O_CREAT, 0644, 1); + res->ps = sem_open(res->name, O_CREAT, 0644, value); } if ((res->ps == (sem_t *) SEM_FAILED)) THROWF(system_error, errno, "sem_open() failed: %s", strerror(errno)); @@ -729,8 +733,7 @@ void xbt_os_thread_join(xbt_os_thread_t thread, void **thread_return) CloseHandle(thread->handle); - if (thread->name) - free(thread->name); + free(thread->name); free(thread); } @@ -1179,7 +1182,7 @@ void *xbt_os_thread_get_extra_data(void) xbt_os_rmutex_t xbt_os_rmutex_init(void) { - xbt_os_rmutex_t rmutex = xbt_new0(struct xbt_os_rmutex_, 0); + xbt_os_rmutex_t rmutex = xbt_new0(struct xbt_os_rmutex_, 1); rmutex->mutex = xbt_os_mutex_init(); rmutex->owner = NULL; rmutex->count = 0;