Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Timothe Litt
BIND
Commits
2483a8c7
Commit
2483a8c7
authored
Apr 30, 2019
by
Mark Andrews
Browse files
lock accesses to hash table
parent
4886701c
Changes
1
Hide whitespace changes
Inline
Side-by-side
bin/plugins/filter-aaaa.c
View file @
2483a8c7
...
...
@@ -89,6 +89,7 @@ typedef struct filter_instance {
* Hash table associating a client object with its persistent data.
*/
isc_ht_t
*
ht
;
isc_mutex_t
hlock
;
/*
* Values configured when the module is loaded.
...
...
@@ -376,6 +377,7 @@ plugin_register(const char *parameters,
CHECK
(
isc_mempool_create
(
mctx
,
sizeof
(
filter_data_t
),
&
inst
->
datapool
));
CHECK
(
isc_ht_init
(
&
inst
->
ht
,
mctx
,
16
));
isc_mutex_init
(
&
inst
->
hlock
);
/*
* Fill the mempool with 1K filter_aaaa state objects at
...
...
@@ -446,6 +448,7 @@ plugin_destroy(void **instp) {
if
(
inst
->
ht
!=
NULL
)
{
isc_ht_destroy
(
&
inst
->
ht
);
isc_mutex_destroy
(
&
inst
->
hlock
);
}
if
(
inst
->
datapool
!=
NULL
)
{
isc_mempool_destroy
(
&
inst
->
datapool
);
...
...
@@ -519,8 +522,10 @@ client_state_get(const query_ctx_t *qctx, filter_instance_t *inst) {
filter_data_t
*
client_state
=
NULL
;
isc_result_t
result
;
LOCK
(
&
inst
->
hlock
);
result
=
isc_ht_find
(
inst
->
ht
,
(
const
unsigned
char
*
)
&
qctx
->
client
,
sizeof
(
qctx
->
client
),
(
void
**
)
&
client_state
);
UNLOCK
(
&
inst
->
hlock
);
return
(
result
==
ISC_R_SUCCESS
?
client_state
:
NULL
);
}
...
...
@@ -538,8 +543,10 @@ client_state_create(const query_ctx_t *qctx, filter_instance_t *inst) {
client_state
->
mode
=
NONE
;
client_state
->
flags
=
0
;
LOCK
(
&
inst
->
hlock
);
result
=
isc_ht_add
(
inst
->
ht
,
(
const
unsigned
char
*
)
&
qctx
->
client
,
sizeof
(
qctx
->
client
),
client_state
);
UNLOCK
(
&
inst
->
hlock
);
RUNTIME_CHECK
(
result
==
ISC_R_SUCCESS
);
}
...
...
@@ -552,8 +559,10 @@ client_state_destroy(const query_ctx_t *qctx, filter_instance_t *inst) {
return
;
}
LOCK
(
&
inst
->
hlock
);
result
=
isc_ht_delete
(
inst
->
ht
,
(
const
unsigned
char
*
)
&
qctx
->
client
,
sizeof
(
qctx
->
client
));
UNLOCK
(
&
inst
->
hlock
);
RUNTIME_CHECK
(
result
==
ISC_R_SUCCESS
);
isc_mempool_put
(
inst
->
datapool
,
client_state
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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