Add error checking to mutexes and condition variables.
After the discussions about PTHREAD_PROCESS_SHARED and after observing that on Cygwin the program simply hangs because this flag is not implemented there, the best way is to check for errors and exit with a clear error message instead of some mysterious hang. libgfortran/ChangeLog: * caf_shared/util.c (ERRCHECK): New macro. (initialize_shared_mutex): Use it to check return codes. (initialize_shared_condition): Likewise.
This commit is contained in:
parent
5ec390b478
commit
1b152d44ac
@ -48,24 +48,33 @@ next_power_of_two (size_t size)
|
||||
return 1 << (PTR_BITS - __builtin_clzl (size - 1));
|
||||
}
|
||||
|
||||
#define ERRCHECK(a) do { \
|
||||
int rc = a; \
|
||||
if (rc) { \
|
||||
errno = rc; \
|
||||
perror (#a " failed"); \
|
||||
exit (1); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
void
|
||||
initialize_shared_mutex (pthread_mutex_t *mutex)
|
||||
{
|
||||
pthread_mutexattr_t mattr;
|
||||
pthread_mutexattr_init (&mattr);
|
||||
pthread_mutexattr_setpshared (&mattr, PTHREAD_PROCESS_SHARED);
|
||||
pthread_mutex_init (mutex, &mattr);
|
||||
pthread_mutexattr_destroy (&mattr);
|
||||
ERRCHECK (pthread_mutexattr_init (&mattr));
|
||||
ERRCHECK (pthread_mutexattr_setpshared (&mattr, PTHREAD_PROCESS_SHARED));
|
||||
ERRCHECK (pthread_mutex_init (mutex, &mattr));
|
||||
ERRCHECK (pthread_mutexattr_destroy (&mattr));
|
||||
}
|
||||
|
||||
void
|
||||
initialize_shared_condition (pthread_cond_t *cond)
|
||||
{
|
||||
pthread_condattr_t cattr;
|
||||
pthread_condattr_init (&cattr);
|
||||
pthread_condattr_setpshared (&cattr, PTHREAD_PROCESS_SHARED);
|
||||
pthread_cond_init (cond, &cattr);
|
||||
pthread_condattr_destroy (&cattr);
|
||||
ERRCHECK (pthread_condattr_init (&cattr));
|
||||
ERRCHECK (pthread_condattr_setpshared (&cattr, PTHREAD_PROCESS_SHARED));
|
||||
ERRCHECK (pthread_cond_init (cond, &cattr));
|
||||
ERRCHECK (pthread_condattr_destroy (&cattr));
|
||||
}
|
||||
|
||||
int
|
||||
|
Loading…
Reference in New Issue
Block a user