1. 08 Aug, 2014 7 commits
    • Dmitriy Vyukov's avatar
      runtime: fix data race in stackalloc · d6d7170d
      Dmitriy Vyukov authored
      Stack shrinking happens during mark phase,
      and it assumes that it owns stackcache in mcache.
      Stack cache flushing also happens during mark phase,
      and it accesses stackcache's w/o any synchronization.
      This leads to stackcache corruption:
      http://goperfd.appspot.com/log/309af5571dfd7e1817259b9c9cf9bcf9b2c27610
      
      LGTM=khr
      R=khr
      CC=golang-codereviews, rsc
      https://golang.org/cl/126870043
      d6d7170d
    • Russ Cox's avatar
      syscall: ignore EINVAL/ENOENT from readdirent on OS X 10.10 · a83bbc9c
      Russ Cox authored
      On OS X 10.10 Yosemite, if you have a directory that can be returned
      in a single getdirentries64 call (for example, a directory with one file),
      and you read from the directory at EOF twice, you get EOF both times:
              fd = open("dir")
              getdirentries64(fd) returns data
              getdirentries64(fd) returns 0 (EOF)
              getdirentries64(fd) returns 0 (EOF)
      
      But if you remove the file in the middle between the two calls, the
      second call returns an error instead.
              fd = open("dir")
              getdirentries64(fd) returns data
              getdirentries64(fd) returns 0 (EOF)
              remove("dir/file")
              getdirentries64(fd) returns ENOENT/EINVAL
      
      Whether you get ENOENT or EINVAL depends on exactly what was
      in the directory. It is deterministic, just data-dependent.
      
      This only happens in small directories. A directory containing more data
      than fits in a 4k getdirentries64 call will return EOF correctly.
      (It's not clear if the criteria is that the directory be split across multiple
      getdirentries64 calls or that it be split across multiple file system blocks.)
      
      We could change package os to avoid the second read at EOF,
      and maybe we should, but that's a bit involved.
      For now, treat the EINVAL/ENOENT as EOF.
      
      With this CL, all.bash passes on my MacBook Air running
      OS X 10.10 (14A299l) and Xcode 6 beta 5 (6A279r).
      
      I tried filing an issue with Apple using "Feedback Assistant", but it was
      unable to send the report and lost it.
      
      C program reproducing the issue, also at http://swtch.com/~rsc/readdirbug.c:
      
      #include <stdio.h>
      #include <dirent.h>
      #include <unistd.h>
      #include <sys/stat.h>
      #include <stdlib.h>
      #include <fcntl.h>
      #include <errno.h>
      #include <string.h>
      
      static void test(int);
      
      int
      main(void)
      {
              int fd, n;
              DIR *dir;
              struct dirent *dp;
              struct stat st;
              char buf[10000];
              long basep;
              int saw;
      
              if(stat("/tmp/readdirbug", &st) >= 0) {
                      fprintf(stderr, "please rm -r /tmp/readdirbug and run again\n");
                      exit(1);
              }
      
              fprintf(stderr, "mkdir /tmp/readdirbug\n");
              if(mkdir("/tmp/readdirbug", 0777) < 0) {
                      perror("mkdir /tmp/readdirbug");
                      exit(1);
              }
      
              fprintf(stderr, "create /tmp/readdirbug/file1\n");
              if((fd = creat("/tmp/readdirbug/file1", 0666)) < 0) {
                      perror("create /tmp/readdirbug/file1");
                      exit(1);
              }
              close(fd);
      
              test(0);
              test(1);
      
              fprintf(stderr, "ok - everything worked\n");
      }
      
      static void
      test(int doremove)
      {
              DIR *dir;
              struct dirent *dp;
              int numeof;
      
              fprintf(stderr, "\n");
              fprintf(stderr, "opendir /tmp/readdirbug\n");
              dir = opendir("/tmp/readdirbug");
              if(dir == 0) {
                      perror("open /tmp/readdirbug");
                      exit(1);
              }
      
              numeof = 0;
              for(;;) {
                      errno = 0;
                      dp = readdir(dir);
                      if(dp != 0) {
                              fprintf(stderr, "readdir: found %s\n", dp->d_name);
                              continue;
                      }
                      if(errno != 0) {
                              perror("readdir");
                              exit(1);
                      }
                      fprintf(stderr, "readdir: EOF\n");
                      if(++numeof == 3)
                              break;
                      if(doremove) {
                              fprintf(stderr, "rm /tmp/readdirbug/file1\n");
                              if(remove("/tmp/readdirbug/file1") < 0) {
                                      perror("remove");
                                      exit(1);
                              }
                      }
              }
              fprintf(stderr, "closedir\n");
              closedir(dir);
      }
      
      Fixes #8423.
      
      LGTM=bradfitz, r
      R=golang-codereviews, bradfitz, dsymonds, dave, r
      CC=golang-codereviews, iant
      https://golang.org/cl/119530044
      a83bbc9c
    • Dmitriy Vyukov's avatar
      encoding/gob: fix data races in benchmarks · f7832df7
      Dmitriy Vyukov authored
      All goroutines decode into the same value.
      
      LGTM=r
      R=r, abursavich
      CC=golang-codereviews
      https://golang.org/cl/123930043
      f7832df7
    • Mikio Hara's avatar
      cmd/go: fix build in airplane mode · 21f7d83f
      Mikio Hara authored
      LGTM=iant
      R=golang-codereviews, adg, iant
      CC=golang-codereviews
      https://golang.org/cl/122190043
      21f7d83f
    • Alex Brainman's avatar
      debug/pe/testdata: make sure gcc-amd64-mingw-exec has symbols · 40b94405
      Alex Brainman authored
      as per rsc request
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/123970043
      40b94405
    • Shenghou Ma's avatar
      misc/nacl/testzip.proto: include cmd/internal/* to fix build · be96e52c
      Shenghou Ma authored
      LGTM=adg, dave
      R=golang-codereviews, adg, dave
      CC=golang-codereviews
      https://golang.org/cl/123050043
      be96e52c
    • Alex Brainman's avatar
      os: simplify windows Getwd (fixes build) · 6fb2a05a
      Alex Brainman authored
      Current version of Getwd calls Stat that
      calls Getwd therefore infinite recursion.
      
      LGTM=minux
      R=golang-codereviews, minux
      CC=golang-codereviews
      https://golang.org/cl/119600043
      6fb2a05a
  2. 07 Aug, 2014 29 commits
  3. 06 Aug, 2014 4 commits