20 |
#endif |
#endif |
21 |
#include <sys/types.h> |
#include <sys/types.h> |
22 |
#include <grp.h> |
#include <grp.h> |
|
#include <pthread.h> |
|
23 |
#include <mem.h> |
#include <mem.h> |
24 |
|
|
25 |
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; |
LOCK_DECLARE(lock) |
26 |
|
|
27 |
struct group * |
struct group * |
28 |
store_group(grp) |
store_group(grp) |
73 |
{ |
{ |
74 |
struct group *grp; |
struct group *grp; |
75 |
|
|
76 |
pthread_cleanup_push((void (*)(void*))pthread_mutex_unlock, &mutex); |
LOCK_SET(lock); |
|
pthread_mutex_lock(&mutex); |
|
77 |
grp = store_group(getgrnam(name)); |
grp = store_group(getgrnam(name)); |
78 |
pthread_cleanup_pop(1); |
LOCK_RELEASE(lock); |
79 |
return grp; |
return grp; |
80 |
} |
} |