diff options
| author | Russ Cox <rsc@golang.org> | 2009-06-04 11:16:03 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2009-06-04 11:16:03 -0700 |
| commit | 3a0df4c451b1db1eb8ab178d4cd2522496bc892d (patch) | |
| tree | 93ccc52d7ec8faec7c4604dee258e7bbc7d8165e /src/lib/net | |
| parent | f51ca384eba74692315b51b1db99d412f4472e17 (diff) | |
| download | go-3a0df4c451b1db1eb8ab178d4cd2522496bc892d.tar.xz | |
more 386 runtime fixes.
can pass many tests;
current stumbling block is an 8l bug.
R=r
DELTA=122 (83 added, 8 deleted, 31 changed)
OCL=29872
CL=29876
Diffstat (limited to 'src/lib/net')
| -rw-r--r-- | src/lib/net/fd_darwin.go | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/src/lib/net/fd_darwin.go b/src/lib/net/fd_darwin.go index 3d1025d516..42bf512210 100644 --- a/src/lib/net/fd_darwin.go +++ b/src/lib/net/fd_darwin.go @@ -31,7 +31,7 @@ func newpollster() (p *pollster, err os.Error) { } func (p *pollster) AddFD(fd int, mode int, repeat bool) os.Error { - var kmode int16; + var kmode int; if mode == 'r' { kmode = syscall.EVFILT_READ } else { @@ -39,23 +39,21 @@ func (p *pollster) AddFD(fd int, mode int, repeat bool) os.Error { } var events [1]syscall.Kevent_t; ev := &events[0]; - ev.Ident = uint64(fd); - ev.Filter = kmode; - // EV_ADD - add event to kqueue list // EV_RECEIPT - generate fake EV_ERROR as result of add, // rather than waiting for real event // EV_ONESHOT - delete the event the first time it triggers - ev.Flags = syscall.EV_ADD | syscall.EV_RECEIPT; + flags := syscall.EV_ADD | syscall.EV_RECEIPT; if !repeat { - ev.Flags |= syscall.EV_ONESHOT + flags |= syscall.EV_ONESHOT } + syscall.SetKevent(ev, fd, kmode, flags); n, e := syscall.Kevent(p.kq, &events, &events, nil); if e != 0 { return os.ErrnoToError(e) } - if n != 1 || (ev.Flags & syscall.EV_ERROR) == 0 || ev.Ident != uint64(fd) || ev.Filter != kmode { + if n != 1 || (ev.Flags & syscall.EV_ERROR) == 0 || int(ev.Ident) != fd || int(ev.Filter) != kmode { return kqueuePhaseError } if ev.Data != 0 { @@ -65,7 +63,7 @@ func (p *pollster) AddFD(fd int, mode int, repeat bool) os.Error { } func (p *pollster) DelFD(fd int, mode int) { - var kmode int16; + var kmode int; if mode == 'r' { kmode = syscall.EVFILT_READ } else { @@ -73,13 +71,10 @@ func (p *pollster) DelFD(fd int, mode int) { } var events [1]syscall.Kevent_t; ev := &events[0]; - ev.Ident = uint64(fd); - ev.Filter = kmode; - // EV_DELETE - delete event from kqueue list // EV_RECEIPT - generate fake EV_ERROR as result of add, // rather than waiting for real event - ev.Flags = syscall.EV_DELETE | syscall.EV_RECEIPT; + syscall.SetKevent(ev, fd, kmode, syscall.EV_DELETE | syscall.EV_RECEIPT); syscall.Kevent(p.kq, &events, &events, nil); } @@ -90,9 +85,7 @@ func (p *pollster) WaitFD(nsec int64) (fd int, mode int, err os.Error) { if t == nil { t = new(syscall.Timespec); } - t.Sec = nsec / 1e9; - t.Nsec = int64(nsec % 1e9); -// *t = syscall.NsecToTimespec(nsec); + *t = syscall.NsecToTimespec(nsec); } nn, e := syscall.Kevent(p.kq, nil, &p.eventbuf, t); if e != 0 { |
