https://bz.apache.org/bugzilla/show_bug.cgi?id=65311
Bug ID: 65311
Summary: NioBlockingSelector.BlockPoller.run() may not be
wakeup in time
Product: Tomcat 8
Version: 8.5.31
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Connectors
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ----
org.apache.tomcat.util.net.NioBlockingSelector.BlockPoller:
227 public void wakeup() {
228 if (wakeupCounter.addAndGet(1)==0) selector.wakeup();
229 }
....
287 public void run() {
288 while (run) {
289 try {
290 events();
291 int keyCount = 0;
292 try {
293 int i = wakeupCounter.get();
294 if (i>0)
295 keyCount = selector.selectNow();
296 else {
297 wakeupCounter.set(-1);
298 keyCount = selector.select(1000);
299 }
300 wakeupCounter.set(0);
when wakeupCounter is 0, selector.select(1000) may not be wakeup in time.
to resolve this bug, we can see org.apache.tomcat.util.net.NioEndpoint.Poller:
782 public void run() {
783 // Loop until destroy() is called
784 while (true) {
785
786 boolean hasEvents = false;
787
788 try {
789 if (!close) {
790 hasEvents = events();
791 if (wakeupCounter.getAndSet(-1) > 0) {
792 //if we are here, means we have other
stuff to do
793 //do a non blocking select
794 keyCount = selector.selectNow();
795 } else {
796 keyCount =
selector.select(selectorTimeout);
797 }
798 wakeupCounter.set(0);
799 }
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]