Add a close callback for socket Rocks (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 22 Dec 2015 21:26:44 +0000 (16:26 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 14 Jan 2016 21:04:46 +0000 (16:04 -0500)
These FDs are the return value from socket().  Under the hood, they are
data FDs.  There are a bunch of things that can be cleaned up now that
we get a callback when the app closes the FD.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.h
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/socket.c

index c40149a..924551c 100644 (file)
@@ -187,6 +187,10 @@ Rock *_sock_newrock(int fd)
        return r;
 }
 
+void _sock_fd_closed(int fd)
+{
+}
+
 /* For a ctlfd and a few other settings, it opens and returns the corresponding
  * datafd.  This will close cfd for you. */
 int
index a45f22b..d0a6206 100644 (file)
@@ -63,6 +63,7 @@ struct Rock {
 
 extern Rock *_sock_findrock(int, struct stat *);
 extern Rock *_sock_newrock(int);
+extern void _sock_fd_closed(int fd);
 extern void _sock_srvname(char *, char *);
 extern int _sock_srv(char *, int);
 extern int _sock_data(int, char *, int, int, int, Rock **);
index 39e38bd..e81f6aa 100644 (file)
@@ -15,6 +15,8 @@
 #include <string.h>
 #include <fcntl.h>
 #include <sys/stat.h>
+#include <sys/close_cb.h>
+#include <ros/common.h>
 
 /* bsd extensions */
 #include <sys/uio.h>
@@ -34,6 +36,9 @@ int __socket(int domain, int type, int protocol)
        int pfd[2];
        char *net;
        char msg[128];
+       static struct close_cb _sock_close_cb = {.func = _sock_fd_closed};
+
+       run_once(register_close_cb(&_sock_close_cb));
 
        switch (domain) {
                case PF_INET: