Skip to content

Commit

Permalink
chore: move the ownerships of reactors from server to eventloop
Browse files Browse the repository at this point in the history
  • Loading branch information
panjf2000 committed Jul 23, 2021
1 parent 8bdbde3 commit bc618a4
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 38 deletions.
18 changes: 9 additions & 9 deletions reactor_default_bsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,31 @@ import (
"github.com/panjf2000/gnet/internal/netpoll"
)

func (svr *server) activateMainReactor(lockOSThread bool) {
func (el *eventloop) activateMainReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer svr.signalShutdown()
defer el.svr.signalShutdown()

err := svr.mainLoop.poller.Polling(func(fd int, filter int16) error { return svr.acceptNewConnection(filter) })
err := el.poller.Polling(func(fd int, filter int16) error { return el.svr.acceptNewConnection(filter) })
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
el.svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
} else if err != nil {
svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
el.svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
}
}

func (svr *server) activateSubReactor(el *eventloop, lockOSThread bool) {
func (el *eventloop) activateSubReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer func() {
el.closeAllConns()
svr.signalShutdown()
el.svr.signalShutdown()
}()

err := el.poller.Polling(func(fd int, filter int16) (err error) {
Expand All @@ -73,9 +73,9 @@ func (svr *server) activateSubReactor(el *eventloop, lockOSThread bool) {
return
})
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
el.svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
} else if err != nil {
svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
el.svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
}
}

Expand Down
18 changes: 9 additions & 9 deletions reactor_default_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,31 +29,31 @@ import (
"github.com/panjf2000/gnet/internal/netpoll"
)

func (svr *server) activateMainReactor(lockOSThread bool) {
func (el *eventloop) activateMainReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer svr.signalShutdown()
defer el.svr.signalShutdown()

err := svr.mainLoop.poller.Polling(func(fd int, ev uint32) error { return svr.acceptNewConnection(ev) })
err := el.poller.Polling(func(fd int, ev uint32) error { return el.svr.acceptNewConnection(ev) })
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
el.svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
} else if err != nil {
svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
el.svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
}
}

func (svr *server) activateSubReactor(el *eventloop, lockOSThread bool) {
func (el *eventloop) activateSubReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer func() {
el.closeAllConns()
svr.signalShutdown()
el.svr.signalShutdown()
}()

err := el.poller.Polling(func(fd int, ev uint32) error {
Expand Down Expand Up @@ -88,9 +88,9 @@ func (svr *server) activateSubReactor(el *eventloop, lockOSThread bool) {
return nil
})
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
el.svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
} else if err != nil {
svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
el.svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
}
}

Expand Down
18 changes: 9 additions & 9 deletions reactor_optimized_bsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,38 +29,38 @@ import (
"github.com/panjf2000/gnet/errors"
)

func (svr *server) activateMainReactor(lockOSThread bool) {
func (el *eventloop) activateMainReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer svr.signalShutdown()
defer el.svr.signalShutdown()

err := svr.mainLoop.poller.Polling()
err := el.poller.Polling()
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
el.svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
} else if err != nil {
svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
el.svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
}
}

func (svr *server) activateSubReactor(el *eventloop, lockOSThread bool) {
func (el *eventloop) activateSubReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer func() {
el.closeAllConns()
svr.signalShutdown()
el.svr.signalShutdown()
}()

err := el.poller.Polling()
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
el.svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
} else if err != nil {
svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
el.svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
}
}

Expand Down
18 changes: 9 additions & 9 deletions reactor_optimized_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,38 +28,38 @@ import (
"github.com/panjf2000/gnet/errors"
)

func (svr *server) activateMainReactor(lockOSThread bool) {
func (el *eventloop) activateMainReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer svr.signalShutdown()
defer el.svr.signalShutdown()

err := svr.mainLoop.poller.Polling()
err := el.poller.Polling()
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
el.svr.opts.Logger.Debugf("main reactor is exiting in terms of the demand from user, %v", err)
} else if err != nil {
svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
el.svr.opts.Logger.Errorf("main reactor is exiting due to error: %v", err)
}
}

func (svr *server) activateSubReactor(el *eventloop, lockOSThread bool) {
func (el *eventloop) activateSubReactor(lockOSThread bool) {
if lockOSThread {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
}

defer func() {
el.closeAllConns()
svr.signalShutdown()
el.svr.signalShutdown()
}()

err := el.poller.Polling()
if err == errors.ErrServerShutdown {
svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
el.svr.opts.Logger.Debugf("event-loop(%d) is exiting in terms of the demand from user, %v", el.idx, err)
} else if err != nil {
svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
el.svr.opts.Logger.Errorf("event-loop(%d) is exiting normally on the signal error: %v", el.idx, err)
}
}

Expand Down
4 changes: 2 additions & 2 deletions server_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (svr *server) startSubReactors() {
svr.lb.iterate(func(i int, el *eventloop) bool {
svr.wg.Add(1)
go func() {
svr.activateSubReactor(el, svr.opts.LockOSThread)
el.activateSubReactor(svr.opts.LockOSThread)
svr.wg.Done()
}()
return true
Expand Down Expand Up @@ -169,7 +169,7 @@ func (svr *server) activateReactors(numEventLoop int) error {
// Start main reactor in background.
svr.wg.Add(1)
go func() {
svr.activateMainReactor(svr.opts.LockOSThread)
el.activateMainReactor(svr.opts.LockOSThread)
svr.wg.Done()
}()
} else {
Expand Down

0 comments on commit bc618a4

Please sign in to comment.