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/libsmb/clientgen.c | |
parent | 7842b391b9ad1f6aaa77c0b8397e1dcc0b79e7e7 (diff) | |
download | samba-d5506215610f95c161ad45dba00a0b180de3a00b.tar.gz samba-d5506215610f95c161ad45dba00a0b180de3a00b.tar.xz 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/libsmb/clientgen.c')
-rw-r--r-- | source3/libsmb/clientgen.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 1ea8033fc62..bdc06f1c74e 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. ****************************************************************************/ |