X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=close_on_fork.c;h=fb1906462b30b74935a64d53370c9810046df771;hp=299aab0b0f613750481657951837da1626ed9aff;hb=08aa4b386c981292aec04fc35fe37133047fb946;hpb=6bdac07456cb5872f824028912d1049883a9c21f diff --git a/close_on_fork.c b/close_on_fork.c index 299aab0b..fb190646 100644 --- a/close_on_fork.c +++ b/close_on_fork.c @@ -5,6 +5,9 @@ */ /** \file close_on_fork.c Manage a list of fds that should be closed on fork. */ + +#include + #include "para.h" #include "list.h" #include "string.h" @@ -63,16 +66,21 @@ void del_close_on_fork_list(int fd) } /** - * Call close(3) for each fd in the close-on-fork list. + * Close all fds in the list and destroy all list entries. + * + * This function calls close(3) for each fd in the close-on-fork list + * and empties the list afterwards. */ void close_listed_fds(void) { - struct close_on_fork *cof; + struct close_on_fork *cof, *tmp; if (!initialized) return; - list_for_each_entry(cof, &close_on_fork_list, node) { + list_for_each_entry_safe(cof, tmp, &close_on_fork_list, node) { PARA_DEBUG_LOG("closing fd %d\n", cof->fd); close(cof->fd); + list_del(&cof->node); + free(cof); } }