Fix use of DLIST_REMOVE as spotted by Constantine Vetoshev <gepardcv@gmail.com>.
commit5d0b71c75833bdd81a050dc82ad74bf481db414e
authorJeremy Allison <jra@samba.org>
Wed, 1 Oct 2008 20:22:02 +0000 (1 13:22 -0700)
committerKarolin Seeger <kseeger@samba.org>
Tue, 9 Dec 2008 10:22:12 +0000 (9 11:22 +0100)
tree55a4d6076921676af20d4a06df7b13eee0b3c388
parent6c5b577ff392a1572a83a820bd9e73bde42213b2
Fix use of DLIST_REMOVE as spotted by Constantine Vetoshev <gepardcv@gmail.com>.
This API is unusual in that if used to remove a non-list head it nulls out
the next and prev pointers. This is what you want for debugging (don't want
an entry removed from the list to be still virtually linked into it) but
means there is no consistent idiom for use as the next and prev pointers
get trashed on removal from the list, meaning you must save them yourself.
You can use it one way when deleting everything via the head pointer, as
this preserves the next pointer, but you *must* use it another way when not
deleting everything via the head pointer. Fix all known uses of this (the main
one is in conn_free_internal() and would not free all the private data entries
for vfs modules. The other changes in web/statuspage.c and winbindd_util.c
are not strictly neccessary, as the head pointer is being used, but I've done
them for consistency. Long term we must revisit this as this API is too hard
to use correctly.
Jeremy.
(cherry picked from commit 347fc4ed725083f2c520afc39f7c81db0dd60324)
(cherry picked from commit 8443b4859f64aa5459976ce37ca96a90daae889a)
source/smbd/conn.c
source/web/statuspage.c
source/winbindd/winbindd_util.c