mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-01-26 16:16:31 -06:00
Fix thread deadlock by using pthreads library instead of NSPR.
The 389-ds team is in the process of exposing slapi_rwlock which we will switch to when it is available. https://fedorahosted.org/freeipa/ticket/1630
This commit is contained in:
parent
17a86397ce
commit
0147ef5b73
@ -42,6 +42,7 @@
|
||||
#include "slapi-plugin.h"
|
||||
#include "nspr.h"
|
||||
#include "prclist.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
@ -88,7 +89,7 @@ struct configEntry {
|
||||
};
|
||||
|
||||
static PRCList *ipamodrdn_global_config = NULL;
|
||||
static PRRWLock *g_ipamodrdn_cache_lock;
|
||||
static pthread_rwlock_t g_ipamodrdn_cache_lock;
|
||||
|
||||
static void *_PluginID = NULL;
|
||||
static char *_PluginDN = NULL;
|
||||
@ -144,17 +145,17 @@ void ipamodrdn_dump_config_entry(struct configEntry *);
|
||||
*/
|
||||
void ipamodrdn_read_lock(void)
|
||||
{
|
||||
PR_RWLock_Rlock(g_ipamodrdn_cache_lock);
|
||||
pthread_rwlock_rdlock(&g_ipamodrdn_cache_lock);
|
||||
}
|
||||
|
||||
void ipamodrdn_write_lock(void)
|
||||
{
|
||||
PR_RWLock_Wlock(g_ipamodrdn_cache_lock);
|
||||
pthread_rwlock_wrlock(&g_ipamodrdn_cache_lock);
|
||||
}
|
||||
|
||||
void ipamodrdn_unlock(void)
|
||||
{
|
||||
PR_RWLock_Unlock(g_ipamodrdn_cache_lock);
|
||||
pthread_rwlock_unlock(&g_ipamodrdn_cache_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -255,9 +256,7 @@ ipamodrdn_start(Slapi_PBlock * pb)
|
||||
goto done;
|
||||
}
|
||||
|
||||
g_ipamodrdn_cache_lock = PR_NewRWLock(PR_RWLOCK_RANK_NONE, "ipaModRDN");
|
||||
|
||||
if (!g_ipamodrdn_cache_lock) {
|
||||
if (pthread_rwlock_init(&g_ipamodrdn_cache_lock, NULL) != 0) {
|
||||
LOG_FATAL("lock creation failed\n");
|
||||
|
||||
return EFAIL;
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "nspr.h"
|
||||
#include "prclist.h"
|
||||
#include "uuid/uuid.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
@ -94,7 +95,7 @@ struct configEntry {
|
||||
};
|
||||
|
||||
static PRCList *ipauuid_global_config = NULL;
|
||||
static PRRWLock *g_ipauuid_cache_lock;
|
||||
static pthread_rwlock_t g_ipauuid_cache_lock;
|
||||
|
||||
static void *_PluginID = NULL;
|
||||
static char *_PluginDN = NULL;
|
||||
@ -155,17 +156,17 @@ void ipauuid_dump_config_entry(struct configEntry *);
|
||||
*/
|
||||
void ipauuid_read_lock(void)
|
||||
{
|
||||
PR_RWLock_Rlock(g_ipauuid_cache_lock);
|
||||
pthread_rwlock_rdlock(&g_ipauuid_cache_lock);
|
||||
}
|
||||
|
||||
void ipauuid_write_lock(void)
|
||||
{
|
||||
PR_RWLock_Wlock(g_ipauuid_cache_lock);
|
||||
pthread_rwlock_wrlock(&g_ipauuid_cache_lock);
|
||||
}
|
||||
|
||||
void ipauuid_unlock(void)
|
||||
{
|
||||
PR_RWLock_Unlock(g_ipauuid_cache_lock);
|
||||
pthread_rwlock_unlock(&g_ipauuid_cache_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -324,9 +325,7 @@ ipauuid_start(Slapi_PBlock * pb)
|
||||
goto done;
|
||||
}
|
||||
|
||||
g_ipauuid_cache_lock = PR_NewRWLock(PR_RWLOCK_RANK_NONE, "ipaUuid");
|
||||
|
||||
if (!g_ipauuid_cache_lock) {
|
||||
if (pthread_rwlock_init(&g_ipauuid_cache_lock, NULL) != 0) {
|
||||
LOG_FATAL("lock creation failed\n");
|
||||
|
||||
return EFAIL;
|
||||
|
Loading…
Reference in New Issue
Block a user