diff options
author | Andrew Tridgell <tridge@samba.org> | 2010-02-06 12:40:38 +1100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2010-02-10 15:38:48 -0800 |
commit | d5506215610f95c161ad45dba00a0b180de3a00b (patch) | |
tree | 7dbe2bc9b773601161bf2d656d3c020ae05eb932 /source3 | |
parent | 7842b391b9ad1f6aaa77c0b8397e1dcc0b79e7e7 (diff) | |
download | samba-d5506215610f95c161ad45dba00a0b180de3a00b.tar.gz samba-d5506215610f95c161ad45dba00a0b180de3a00b.tar.bz2 samba-d5506215610f95c161ad45dba00a0b180de3a00b.zip |
s3-libsmb: update libsmb to use new DLIST macros
manipulating p->prev directly is not safe any more
(cherry picked from commit 3c650ac1e3e1cdbbabecfddcd29325f20b5dcb48)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libsmb/clidfs.c | 2 | ||||
-rw-r--r-- | source3/libsmb/clientgen.c | 46 |
2 files changed, 25 insertions, 23 deletions
diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c index 2a39ee9b58..d9e2b87d10 100644 --- a/source3/libsmb/clidfs.c +++ b/source3/libsmb/clidfs.c @@ -351,7 +351,7 @@ static struct cli_state *cli_cm_find(struct cli_state *cli, } /* Search to the start of the list. */ - for (p = cli; p; p = p->prev) { + for (p = cli; p; p = DLIST_PREV(p)) { if (strequal(server, p->desthost) && strequal(share,p->share)) { return p; diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 1ea8033fc6..bdc06f1c74 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -693,29 +693,8 @@ void cli_nt_pipes_close(struct cli_state *cli) Shutdown a client structure. ****************************************************************************/ -void cli_shutdown(struct cli_state *cli) +static void _cli_shutdown(struct cli_state *cli) { - if (cli->prev == NULL) { - /* - * Possible head of a DFS list, - * shutdown all subsidiary DFS - * connections. - */ - struct cli_state *p, *next; - - for (p = cli->next; p; p = next) { - next = p->next; - cli_shutdown(p); - } - } else { - /* - * We're a subsidiary connection. - * Just remove ourselves from the - * DFS list. - */ - DLIST_REMOVE(cli->prev, cli); - } - cli_nt_pipes_close(cli); /* @@ -755,6 +734,29 @@ void cli_shutdown(struct cli_state *cli) TALLOC_FREE(cli); } +void cli_shutdown(struct cli_state *cli) +{ + struct cli_state *cli_head; + DLIST_HEAD(cli, cli_head); + if (cli_head == cli) { + /* + * head of a DFS list, shutdown all subsidiary DFS + * connections. + */ + struct cli_state *p, *next; + + for (p = cli_head->next; p; p = next) { + next = p->next; + DLIST_REMOVE(cli_head, p); + _cli_shutdown(p); + } + } else { + DLIST_REMOVE(cli_head, cli); + } + + _cli_shutdown(cli); +} + /**************************************************************************** Set socket options on a open connection. ****************************************************************************/ |