Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Дилян Палаузов
OpenLDAP
Commits
60c21924
Commit
60c21924
authored
Jul 29, 2021
by
Ondřej Kuzník
Committed by
Quanah Gibson-Mount
Aug 06, 2021
Browse files
ITS#9620 Turn mi_cache_mutex into a RW lock
parent
8d235737
Changes
3
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-monitor/back-monitor.h
View file @
60c21924
...
...
@@ -83,7 +83,7 @@ typedef struct monitor_info_t {
* Internal data
*/
Avlnode
*
mi_cache
;
ldap_pvt_thread_
mutex
_t
mi_cache_
mutex
;
ldap_pvt_thread_
rdwr
_t
mi_cache_
rwlock
;
/*
* Config parameters
...
...
servers/slapd/back-monitor/cache.c
View file @
60c21924
...
...
@@ -90,10 +90,10 @@ monitor_cache_add(
mc
=
(
monitor_cache_t
*
)
ch_malloc
(
sizeof
(
monitor_cache_t
)
);
mc
->
mc_ndn
=
e
->
e_nname
;
mc
->
mc_e
=
e
;
ldap_pvt_thread_
mutex_
lock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_w
lock
(
&
mi
->
mi_cache_
rwlock
);
rc
=
ldap_avl_insert
(
&
mi
->
mi_cache
,
(
caddr_t
)
mc
,
monitor_cache_cmp
,
monitor_cache_dup
);
ldap_pvt_thread_
mutex_
unlock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_w
unlock
(
&
mi
->
mi_cache_
rwlock
);
return
rc
;
}
...
...
@@ -152,21 +152,21 @@ monitor_cache_get(
tmp_mc
.
mc_ndn
=
*
ndn
;
retry:
;
ldap_pvt_thread_
mutex_
lock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_r
lock
(
&
mi
->
mi_cache_
rwlock
);
mc
=
(
monitor_cache_t
*
)
ldap_avl_find
(
mi
->
mi_cache
,
(
caddr_t
)
&
tmp_mc
,
monitor_cache_cmp
);
if
(
mc
!=
NULL
)
{
/* entry is returned with mutex locked */
if
(
monitor_cache_trylock
(
mc
->
mc_e
)
)
{
ldap_pvt_thread_
mutex_
unlock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_r
unlock
(
&
mi
->
mi_cache_
rwlock
);
ldap_pvt_thread_yield
();
goto
retry
;
}
*
ep
=
mc
->
mc_e
;
}
ldap_pvt_thread_
mutex_
unlock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_r
unlock
(
&
mi
->
mi_cache_
rwlock
);
return
(
*
ep
==
NULL
?
-
1
:
0
);
}
...
...
@@ -193,7 +193,7 @@ monitor_cache_remove(
dnParent
(
ndn
,
&
pndn
);
retry:
;
ldap_pvt_thread_
mutex_
lock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_w
lock
(
&
mi
->
mi_cache_
rwlock
);
tmp_mc
.
mc_ndn
=
*
ndn
;
mc
=
(
monitor_cache_t
*
)
ldap_avl_find
(
mi
->
mi_cache
,
...
...
@@ -203,7 +203,7 @@ retry:;
monitor_cache_t
*
pmc
;
if
(
monitor_cache_trylock
(
mc
->
mc_e
)
)
{
ldap_pvt_thread_
mutex_
unlock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_w
unlock
(
&
mi
->
mi_cache_
rwlock
);
goto
retry
;
}
...
...
@@ -217,7 +217,7 @@ retry:;
if
(
monitor_cache_trylock
(
pmc
->
mc_e
)
)
{
monitor_cache_release
(
mi
,
mc
->
mc_e
);
ldap_pvt_thread_
mutex_
unlock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_w
unlock
(
&
mi
->
mi_cache_
rwlock
);
goto
retry
;
}
...
...
@@ -272,7 +272,7 @@ retry:;
}
}
ldap_pvt_thread_
mutex_
unlock
(
&
mi
->
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr_w
unlock
(
&
mi
->
mi_cache_
rwlock
);
return
(
*
ep
==
NULL
?
-
1
:
0
);
}
...
...
servers/slapd/back-monitor/init.c
View file @
60c21924
...
...
@@ -2155,7 +2155,7 @@ monitor_back_db_init(
/* NOTE: only one monitor database is allowed,
* so we use static storage */
ldap_pvt_thread_
mutex
_init
(
&
monitor_info
.
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr
_init
(
&
monitor_info
.
mi_cache_
rwlock
);
be
->
be_private
=
&
monitor_info
;
...
...
@@ -2558,7 +2558,7 @@ monitor_back_db_destroy(
}
}
ldap_pvt_thread_
mutex
_destroy
(
&
monitor_info
.
mi_cache_
mutex
);
ldap_pvt_thread_
rdwr
_destroy
(
&
monitor_info
.
mi_cache_
rwlock
);
be
->
be_private
=
NULL
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment