[v3,04/10] files: Close old service fd in clone_service_fd()

Submitted by Kirill Tkhai on Dec. 29, 2017, 9:35 a.m.


Message ID 151454014516.19480.11496543085962367858.stgit@localhost.localdomain
State New
Series "Introduce custom per-task service fds placement"
Headers show

Commit Message

Kirill Tkhai Dec. 29, 2017, 9:35 a.m.
Next patches will make service_fd_base not contant.
It will be "floating" and change from task to task.
This patch makes preparation for that: it closes
old service fd after it's duplicated.

Currently the code is unused as in case of
!(rsti(me)->clone_flags & CLONE_FILES), the child
has the same id as its parent, and the duplication
just does not occur.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
 criu/util.c |    2 ++
 1 file changed, 2 insertions(+)

Patch hide | download patch | download mbox

diff --git a/criu/util.c b/criu/util.c
index a8b7ef4ef..a1ce72f8b 100644
--- a/criu/util.c
+++ b/criu/util.c
@@ -545,6 +545,8 @@  int clone_service_fd(struct pstree_item *me)
 			pr_perror("Unable to clone %d->%d", old, new);
+		if (ret >= 0 && !(rsti(me)->clone_flags & CLONE_FILES))
+			close(old);
 	service_fd_id = id;