X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=close_on_fork.c;h=378799c7d5505135d59e976cd43416984c9500a6;hp=722e7509cc3aa44db29a4067b94e58a682160cbf;hb=4d5a9b90c3e9cbdff019776d05792beb57fbfa31;hpb=f269333700038603703ec79c909d514bee731faf;ds=sidebyside diff --git a/close_on_fork.c b/close_on_fork.c index 722e7509..378799c7 100644 --- a/close_on_fork.c +++ b/close_on_fork.c @@ -1,22 +1,10 @@ /* - * Copyright (C) 2005-2006 Andre Noll + * Copyright (C) 2005-2009 Andre Noll * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file close_on_fork.c manage a list of fds that should be closed on fork */ +/** \file close_on_fork.c Manage a list of fds that should be closed on fork. */ #include "para.h" #include "list.h" #include "string.h" @@ -25,21 +13,21 @@ static struct list_head close_on_fork_list; static int initialized; /** - * describes an element of the close-on-fork list + * Describes an element of the close-on-fork list. * * \sa list.h */ struct close_on_fork { - /** the file descriptor which should be closed after fork() */ + /** The file descriptor which should be closed after fork(). */ int fd; - /** the position in the close-on-fork list */ + /** The position in the close-on-fork list. */ struct list_head node; }; /** - * add one file descriptor to the close-on-fork list + * Add one file descriptor to the close-on-fork list. * - * \param fd the file descriptor to add + * \param fd The file descriptor to add. */ void add_close_on_fork_list(int fd) { @@ -53,11 +41,10 @@ void add_close_on_fork_list(int fd) para_list_add(&cof->node, &close_on_fork_list); } - /** - * delete one file descriptor from the close-on-fork list + * Delete one file descriptor from the close-on-fork list. * - * \param fd the file descriptor to delete + * \param fd The file descriptor to delete. * * Noop if \a fd does not belong to the close-on-fork list. */ @@ -76,16 +63,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); } }