Clean up _sock_newrock()'s initialization (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 2 Sep 2015 21:51:07 +0000 (17:51 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
The initialization of certain fields was a bit sketchy.  Considering
that Rocks are reused, I want to proactively initialize bits, and not
rely on the caller to initialize the parts that _sock_newrock()
previously was ignoring.

Also, if _sock_findrock() succeeded, then we should know that the device
and inode match the old Rock.  Those asserts should never fire (hence
they are asserts).

tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c

index 90d6645..fae05b0 100644 (file)
@@ -14,6 +14,7 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <string.h>
+#include <assert.h>
 
 /* bsd extensions */
 #include <sys/uio.h>
@@ -166,16 +167,20 @@ Rock *_sock_newrock(int fd)
                        return 0;
                r->dev = d.st_dev;
                r->inode = d.st_ino;
-               r->other = -1;
                /* TODO: this is not thread-safe! */
                r->next = _sock_rock;
                _sock_rock = r;
        }
-       memset(&r->raddr, 0, sizeof(r->raddr));
+       assert(r->dev == d.st_dev);
+       assert(r->inode == d.st_ino);
+       r->domain = 0;
+       r->stype = 0;
+       r->sopts = 0;
+       r->protocol = 0;
        memset(&r->addr, 0, sizeof(r->addr));
        r->reserved = 0;
-       r->dev = d.st_dev;
-       r->inode = d.st_ino;
+       memset(&r->raddr, 0, sizeof(r->raddr));
+       r->ctl[0] = '\0';
        r->other = -1;
        return r;
 }