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
OpenLDAP
Commits
59d4b38a
Commit
59d4b38a
authored
Feb 13, 2007
by
Howard Chu
Browse files
syncinfo_free must be able to free multiple syncinfos
parent
f649d8a2
Changes
3
Hide whitespace changes
Inline
Side-by-side
servers/slapd/backend.c
View file @
59d4b38a
...
...
@@ -422,7 +422,7 @@ void backend_destroy_one( BackendDB *bd, int dynamic )
}
if
(
bd
->
be_syncinfo
)
{
syncinfo_free
(
bd
->
be_syncinfo
);
syncinfo_free
(
bd
->
be_syncinfo
,
1
);
}
backend_stopdown_one
(
bd
);
...
...
servers/slapd/proto-slap.h
View file @
59d4b38a
...
...
@@ -1673,7 +1673,7 @@ LDAP_SLAPD_F (Filter *) str2filter_x LDAP_P(( Operation *op, const char *str ));
LDAP_SLAPD_F
(
int
)
syncrepl_add_glue
LDAP_P
((
Operation
*
,
Entry
*
));
LDAP_SLAPD_F
(
void
)
syncinfo_free
LDAP_P
((
struct
syncinfo_s
*
));
LDAP_SLAPD_F
(
void
)
syncinfo_free
LDAP_P
((
struct
syncinfo_s
*
,
int
all
));
/* syntax.c */
LDAP_SLAPD_F
(
Syntax
*
)
syn_find
LDAP_P
((
...
...
servers/slapd/syncrepl.c
View file @
59d4b38a
...
...
@@ -1251,10 +1251,11 @@ reload:
cs
=
be
->
be_syncinfo
->
si_cookieState
;
for
(
sip
=
&
be
->
be_syncinfo
;
*
sip
!=
si
;
sip
=
&
(
*
sip
)
->
si_next
);
*
sip
=
si
->
si_next
;
syncinfo_free
(
si
);
syncinfo_free
(
si
,
0
);
if
(
!
be
->
be_syncinfo
)
{
SLAP_DBFLAGS
(
be
)
&=
~
(
SLAP_DBFLAG_SHADOW
|
SLAP_DBFLAG_SYNC_SHADOW
);
if
(
cs
)
{
ch_free
(
cs
->
cs_sids
);
ber_bvarray_free
(
cs
->
cs_vals
);
ldap_pvt_thread_mutex_destroy
(
&
cs
->
cs_mutex
);
ch_free
(
cs
);
...
...
@@ -3067,106 +3068,119 @@ avl_ber_bvfree( void *v_bv )
}
void
syncinfo_free
(
syncinfo_t
*
sie
)
syncinfo_free
(
syncinfo_t
*
sie
,
int
free_all
)
{
if
(
sie
->
si_ld
)
{
if
(
sie
->
si_conn_setup
)
{
ber_socket_t
s
;
ldap_get_option
(
sie
->
si_ld
,
LDAP_OPT_DESC
,
&
s
);
connection_client_stop
(
s
);
sie
->
si_conn_setup
=
0
;
}
ldap_unbind_ext
(
sie
->
si_ld
,
NULL
,
NULL
);
}
syncinfo_t
*
si_next
;
/* re-fetch it, in case it was already removed */
sie
->
si_re
=
ldap_pvt_runqueue_find
(
&
slapd_rq
,
do_syncrepl
,
sie
);
if
(
sie
->
si_re
)
{
if
(
ldap_pvt_runqueue_isrunning
(
&
slapd_rq
,
sie
->
si_re
)
)
ldap_pvt_runqueue_stoptask
(
&
slapd_rq
,
sie
->
si_re
);
ldap_pvt_runqueue_remove
(
&
slapd_rq
,
sie
->
si_re
);
if
(
free_all
&&
sie
->
si_cookieState
)
{
ch_free
(
sie
->
si_cookieState
->
cs_sids
);
ber_bvarray_free
(
sie
->
si_cookieState
->
cs_vals
);
ldap_pvt_thread_mutex_destroy
(
&
sie
->
si_cookieState
->
cs_mutex
);
ch_free
(
sie
->
si_cookieState
);
}
do
{
si_next
=
sie
->
si_next
;
ldap_pvt_thread_mutex_destroy
(
&
sie
->
si_mutex
);
bindconf_free
(
&
sie
->
si_bindconf
);
if
(
sie
->
si_filterstr
.
bv_val
)
{
ch_free
(
sie
->
si_filterstr
.
bv_val
);
}
if
(
sie
->
si_logfilterstr
.
bv_val
)
{
ch_free
(
sie
->
si_logfilterstr
.
bv_val
);
}
if
(
sie
->
si_base
.
bv_val
)
{
ch_free
(
sie
->
si_base
.
bv_val
);
}
if
(
sie
->
si_logbase
.
bv_val
)
{
ch_free
(
sie
->
si_logbase
.
bv_val
);
}
if
(
sie
->
si_attrs
)
{
int
i
=
0
;
while
(
sie
->
si_attrs
[
i
]
!=
NULL
)
{
ch_free
(
sie
->
si_attrs
[
i
]
);
i
++
;
if
(
sie
->
si_ld
)
{
if
(
sie
->
si_conn_setup
)
{
ber_socket_t
s
;
ldap_get_option
(
sie
->
si_ld
,
LDAP_OPT_DESC
,
&
s
);
connection_client_stop
(
s
);
sie
->
si_conn_setup
=
0
;
}
ldap_unbind_ext
(
sie
->
si_ld
,
NULL
,
NULL
);
}
ch_free
(
sie
->
si_attrs
);
}
if
(
sie
->
si_
exattrs
)
{
i
nt
i
=
0
;
while
(
sie
->
si_exattrs
[
i
]
!=
NULL
)
{
ch_free
(
sie
->
si_exattrs
[
i
]
);
i
++
;
/* re-fetch it, in case it was already removed */
sie
->
si_
re
=
ldap_pvt_runqueue_find
(
&
slapd_rq
,
do_syncrepl
,
sie
);
i
f
(
sie
->
si_re
)
{
if
(
ldap_pvt_runqueue_isrunning
(
&
slapd_rq
,
sie
->
si_re
)
)
ldap_pvt_runqueue_stoptask
(
&
slapd_rq
,
sie
->
si_re
);
ldap_pvt_runqueue_remove
(
&
slapd_rq
,
sie
->
si_re
)
;
}
ch_free
(
sie
->
si_exattrs
);
}
if
(
sie
->
si_anlist
)
{
in
t
i
=
0
;
while
(
sie
->
si_anlist
[
i
].
an_name
.
bv_val
!=
NULL
)
{
ch_free
(
sie
->
si_
anlist
[
i
].
an_name
.
bv_val
)
;
i
++
;
ldap_pvt_thread_mutex_destroy
(
&
sie
->
si_mutex
);
b
in
dconf_free
(
&
sie
->
si_bindconf
)
;
if
(
sie
->
si_
filterstr
.
bv_val
)
{
ch_free
(
sie
->
si_filterstr
.
bv_val
)
;
}
ch_free
(
sie
->
si_anlist
);
}
if
(
sie
->
si_exanlist
)
{
int
i
=
0
;
while
(
sie
->
si_exanlist
[
i
].
an_name
.
bv_val
!=
NULL
)
{
ch_free
(
sie
->
si_exanlist
[
i
].
an_name
.
bv_val
);
i
++
;
if
(
sie
->
si_logfilterstr
.
bv_val
)
{
ch_free
(
sie
->
si_logfilterstr
.
bv_val
);
}
ch_free
(
sie
->
si_exanlist
);
}
if
(
sie
->
si_retryinterval
)
{
ch_free
(
sie
->
si_retryinterval
);
}
if
(
sie
->
si_retrynum
)
{
ch_free
(
sie
->
si_retrynum
);
}
if
(
sie
->
si_retrynum_init
)
{
ch_free
(
sie
->
si_retrynum_init
);
}
slap_sync_cookie_free
(
&
sie
->
si_syncCookie
,
0
);
if
(
sie
->
si_presentlist
)
{
avl_free
(
sie
->
si_presentlist
,
avl_ber_bvfree
);
}
while
(
!
LDAP_LIST_EMPTY
(
&
sie
->
si_nonpresentlist
)
)
{
struct
nonpresent_entry
*
npe
;
npe
=
LDAP_LIST_FIRST
(
&
sie
->
si_nonpresentlist
);
LDAP_LIST_REMOVE
(
npe
,
npe_link
);
if
(
npe
->
npe_name
)
{
if
(
npe
->
npe_name
->
bv_val
)
{
ch_free
(
npe
->
npe_name
->
bv_val
);
if
(
sie
->
si_base
.
bv_val
)
{
ch_free
(
sie
->
si_base
.
bv_val
);
}
if
(
sie
->
si_logbase
.
bv_val
)
{
ch_free
(
sie
->
si_logbase
.
bv_val
);
}
if
(
sie
->
si_attrs
)
{
int
i
=
0
;
while
(
sie
->
si_attrs
[
i
]
!=
NULL
)
{
ch_free
(
sie
->
si_attrs
[
i
]
);
i
++
;
}
ch_free
(
np
e
->
npe_name
);
ch_free
(
si
e
->
si_attrs
);
}
if
(
npe
->
npe_nname
)
{
if
(
npe
->
npe_nname
->
bv_val
)
{
ch_free
(
npe
->
npe_nname
->
bv_val
);
if
(
sie
->
si_exattrs
)
{
int
i
=
0
;
while
(
sie
->
si_exattrs
[
i
]
!=
NULL
)
{
ch_free
(
sie
->
si_exattrs
[
i
]
);
i
++
;
}
ch_free
(
np
e
->
npe_nname
);
ch_free
(
si
e
->
si_exattrs
);
}
ch_free
(
npe
);
}
ch_free
(
sie
);
if
(
sie
->
si_anlist
)
{
int
i
=
0
;
while
(
sie
->
si_anlist
[
i
].
an_name
.
bv_val
!=
NULL
)
{
ch_free
(
sie
->
si_anlist
[
i
].
an_name
.
bv_val
);
i
++
;
}
ch_free
(
sie
->
si_anlist
);
}
if
(
sie
->
si_exanlist
)
{
int
i
=
0
;
while
(
sie
->
si_exanlist
[
i
].
an_name
.
bv_val
!=
NULL
)
{
ch_free
(
sie
->
si_exanlist
[
i
].
an_name
.
bv_val
);
i
++
;
}
ch_free
(
sie
->
si_exanlist
);
}
if
(
sie
->
si_retryinterval
)
{
ch_free
(
sie
->
si_retryinterval
);
}
if
(
sie
->
si_retrynum
)
{
ch_free
(
sie
->
si_retrynum
);
}
if
(
sie
->
si_retrynum_init
)
{
ch_free
(
sie
->
si_retrynum_init
);
}
slap_sync_cookie_free
(
&
sie
->
si_syncCookie
,
0
);
if
(
sie
->
si_presentlist
)
{
avl_free
(
sie
->
si_presentlist
,
avl_ber_bvfree
);
}
while
(
!
LDAP_LIST_EMPTY
(
&
sie
->
si_nonpresentlist
)
)
{
struct
nonpresent_entry
*
npe
;
npe
=
LDAP_LIST_FIRST
(
&
sie
->
si_nonpresentlist
);
LDAP_LIST_REMOVE
(
npe
,
npe_link
);
if
(
npe
->
npe_name
)
{
if
(
npe
->
npe_name
->
bv_val
)
{
ch_free
(
npe
->
npe_name
->
bv_val
);
}
ch_free
(
npe
->
npe_name
);
}
if
(
npe
->
npe_nname
)
{
if
(
npe
->
npe_nname
->
bv_val
)
{
ch_free
(
npe
->
npe_nname
->
bv_val
);
}
ch_free
(
npe
->
npe_nname
);
}
ch_free
(
npe
);
}
ch_free
(
sie
);
sie
=
si_next
;
}
while
(
free_all
&&
si_next
);
}
...
...
@@ -3703,7 +3717,7 @@ add_syncrepl(
Debug
(
LDAP_DEBUG_ANY
,
"version %d incompatible with syncrepl
\n
"
,
si
->
si_bindconf
.
sb_version
,
0
,
0
);
syncinfo_free
(
si
);
syncinfo_free
(
si
,
0
);
return
1
;
}
...
...
@@ -3746,7 +3760,7 @@ add_syncrepl(
#endif
if
(
rc
<
0
)
{
Debug
(
LDAP_DEBUG_ANY
,
"failed to add syncinfo
\n
"
,
0
,
0
,
0
);
syncinfo_free
(
si
);
syncinfo_free
(
si
,
0
);
return
1
;
}
else
{
Debug
(
LDAP_DEBUG_CONFIG
,
...
...
@@ -3965,7 +3979,7 @@ syncrepl_config( ConfigArgs *c )
ldap_pvt_runqueue_isrunning
(
&
slapd_rq
,
si
->
si_re
)
)
{
si
->
si_ctype
=
0
;
}
else
{
syncinfo_free
(
si
);
syncinfo_free
(
si
,
0
);
}
if
(
i
==
c
->
valx
)
break
;
...
...
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