From 084a4d309ffcc649d271097932686dcca19d1a5a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 13 Jun 1999 23:43:03 +0000 Subject: 1999-06-13 Roland McGrath * main.c (trivfs_goaway): Exit if there are no socket ports. --- pfinet/main.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'pfinet/main.c') diff --git a/pfinet/main.c b/pfinet/main.c index 41b34005..a0e149b3 100644 --- a/pfinet/main.c +++ b/pfinet/main.c @@ -228,5 +228,27 @@ trivfs_goaway (struct trivfs_control *cntl, int flags) if (flags & FSYS_GOAWAY_FORCE) exit (0); else - return EBUSY; + { + /* Stop new requests. */ + ports_inhibit_class_rpcs (trivfs_cntl_portclasses[0]); + ports_inhibit_class_rpcs (trivfs_protid_portclasses[0]); + ports_inhibit_class_rpcs (socketport_class); + + if (ports_count_class (socketport_class) != 0) + { + /* We won't go away, so start things going again... */ + ports_enable_class (socketport_class); + ports_resume_class_rpcs (trivfs_cntl_portclasses[0]); + ports_resume_class_rpcs (trivfs_protid_portclasses[0]); + + return EBUSY; + } + + /* There are no sockets, so we can die without breaking anybody + too badly. We don't let user ports on the /servers/socket/2 + file keep us alive because those get cached in every process + that ever makes a PF_INET socket, libc copes with getting + MACH_SEND_INVALID_DEST and looking up the new translator. */ + exit (0); + } } -- cgit v1.2.3