1. 11 Apr, 2010 8 commits
  2. 10 Apr, 2010 2 commits
  3. 09 Apr, 2010 14 commits
  4. 08 Apr, 2010 6 commits
    • Russ Cox's avatar
      runtime: fix bad status throw · 72157c30
      Russ Cox authored
      when garbage collector sees recovering goroutine
      
      Fixes #711.
      
      R=r
      CC=golang-dev
      https://golang.org/cl/869045
      72157c30
    • Russ Cox's avatar
      runtime: work around kernel bug in Snow Leopard signal handling · 2f0cae46
      Russ Cox authored
      Could not take a signal on threads other than the main thread.
      If you look at the spinning binary with dtrace, you can see a
      fault happening over and over:
      
          $ dtrace -n '
          fbt::user_trap:entry /execname=="boot32" && self->count < 10/
          {
              self->count++;
              printf("%s %x %x %x %x", probefunc, arg1, arg2, arg3, arg4);
              stack();
              tracemem(arg4, 256);
          }'
      
          dtrace: description 'fbt::user_trap:entry ' matched 1 probe
          CPU     ID                    FUNCTION:NAME
            1  17015                  user_trap:entry user_trap 0 10 79af0a0 79af0a0
                        mach_kernel`lo_alltraps+0x12a
      
                   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f  0123456789abcdef
               0: 0e 00 00 00 37 00 00 00 00 00 00 00 1f 00 00 00  ....7...........
              10: 1f 00 00 00 a8 33 00 00 00 00 00 01 00 00 00 00  .....3..........
              20: 98 ba dc fe 07 09 00 00 00 00 00 00 98 ba dc fe  ................
              30: 06 00 00 00 0d 00 00 00 34 00 00 00 9e 1c 00 00  ........4.......
              40: 17 00 00 00 00 02 00 00 ac 30 00 00 1f 00 00 00  .........0......
              50: 00 00 00 00 00 00 00 00 0d 00 00 00 e0 e6 29 00  ..............).
              60: 34 00 00 00 00 00 00 00 9e 1c 00 00 00 00 00 00  4...............
              70: 17 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00  ................
              80: ac 30 00 00 00 00 00 00 1f 00 00 00 00 00 00 00  .0..............
              90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
              a0: 48 00 00 00 10 00 00 00 85 00 00 00 a0 f2 29 00  H.............).
              b0: 69 01 00 02 00 00 00 00 e6 93 04 82 ff 7f 00 00  i...............
              c0: 2f 00 00 00 00 00 00 00 06 02 00 00 00 00 00 00  /...............
              d0: 78 ee 42 01 01 00 00 00 1f 00 00 00 00 00 00 00  x.B.............
              e0: 00 ed 9a 07 00 00 00 00 00 00 00 00 00 00 00 00  ................
              f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      
          ...
      
      The memory dump shows a 32-bit exception frame:
      
          x86_saved_state32
      
          gs = 0x37
          fs = 0
          es = 0x1f
          ds = 0x1f
          edi = 0x33a8
          esi = 0x01000000
          ebp = 0
          cr2 = 0xfedcba98
          ebx = 0x0907
          edx = 0
          ecx = 0xfedcba98
          eax = 0x06
          trapno = 0x0d
          err = 0x34
          eip = 0x1c9e
          cs = 0x17
          efl = 0x0200
          uesp = 0x30ac
          ss = 0x1f
      
      The cr2 of 0xfedcba98 is the address that the new thread read
      to cause the fault, but note that the trap is now a GP fault with
      error code 0x34, meaning it's moved past the cr2 problem and on
      to an invaild segment selector.  The 0x34 is suspiciously similar
      to the 0x37 in gs, and sure enough, OS X forces gs to have
      that value in the signal handler, and if your thread hasn't set
      up that segment (known as USER_CTHREAD), you'll fault on the IRET
      into the signal handler and never be able to handle a signal.
      
      The kernel bug is that it forces segment 0x37 without making sure
      it is a valid segment.  Leopard also forced 0x37 but had the courtesy
      to set it up first.
      
      Since OS X requires us to set up that segment (using the
      thread_fast_set_cthread_self system call), we might as well
      use it instead of the more complicated i386_set_ldt call to
      set up our per-OS thread storage.
      
      Also add some more zeros to bsdthread_register for new arguments
      in Snow Leopard (apparently unnecessary, but being careful).
      
      Fixes #510.
      
      R=r
      CC=golang-dev
      https://golang.org/cl/824046
      2f0cae46
    • Charles L. Dorian's avatar
      math: atan2 special cases (negative zero) · 9aa8f95b
      Charles L. Dorian authored
      Added Signbit(), revised Copysign()
      
      R=rsc
      CC=golang-dev
      https://golang.org/cl/822045
      9aa8f95b
    • Russ Cox's avatar
      runtime: use explicit flag when finalizer goroutine is waiting · 24c58174
      Russ Cox authored
      Avoids spurious wakeups during other sleeping by that goroutine.
      Fixes #711.
      
      R=r
      CC=golang-dev
      https://golang.org/cl/902041
      24c58174
    • Rob Pike's avatar
      gotest: update URL printed by failure message. · 00eb56c1
      Rob Pike authored
      Fixes #677.
      
      R=rsc
      CC=golang-dev
      https://golang.org/cl/834046
      00eb56c1
    • Joe Poirier's avatar
      d37e87c1
  5. 07 Apr, 2010 5 commits
  6. 06 Apr, 2010 5 commits
    • Ken Thompson's avatar
      change channel read to clear · dec248c6
      Ken Thompson authored
      data just read from the channel.
      this will make it easier to
      recognize when to garbage
      collect and finalize.
      
      R=rsc
      CC=golang-dev
      https://golang.org/cl/882043
      dec248c6
    • Russ Cox's avatar
      net: use chan bool instead of chan *netFD to avoid cycle · caa149f7
      Russ Cox authored
      The cycle is *netFD -> cw chanl *netFD in struct ->
      same *netFD in channel read buffer.
      
      Because channels are finalized, the cycle makes them
      uncollectable.  A better fix is to make channels not
      finalized anymore, and that will happen, but this is
      an easy, reasonable workaround until then.
      
      Another good fix would be to zero the channel receive
      buffer entry after the receive.  That too will happen.
      
      R=r
      CC=golang-dev
      https://golang.org/cl/875043
      caa149f7
    • Rob Pike's avatar
      flags: better tests. · 6431b984
      Rob Pike authored
      R=rsc
      CC=golang-dev
      https://golang.org/cl/864044
      6431b984
    • Russ Cox's avatar
      runtime: two proc bug fixes · 88ce9ce4
      Russ Cox authored
      1. Fix bug in GOMAXPROCS when trying to cut number of procs
      Race could happen on any system but was
      manifesting only on Xen hosted Linux.
      
      2. Fix recover on ARM, where FP != caller SP.
      
      R=r
      CC=golang-dev
      https://golang.org/cl/880043
      88ce9ce4
    • Roger Peppe's avatar
      Change goyacc to be reentrant. · 6c3befc8
      Roger Peppe authored
      Instead of calling the package scope Lex function,
      Parse now takes an argument which is used to
      do the lexing.
      I reverted to having the generated switch
      code inside Parse rather than a separate function because
      the function needs 7 arguments or a context structure,
      which seems unnecessary.
      I used yyrun(), not the original $A so that
      it's possible to run the backquoted code through gofmt.
      
      R=rsc, ken2, ken3
      CC=golang-dev
      https://golang.org/cl/879041
      6c3befc8