Changeset 8:dba41f33ddce in xplcommon for src/xplcommon/posix/WaitableEvent.cc
- Timestamp:
- 12/29/12 08:01:50 (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/xplcommon/posix/WaitableEvent.cc
r6 r8 48 48 49 49 WaitableEvent::WaitableEvent(Waiter* waiter) : 50 Waitable(waiter, eventfd(0, EFD_NONBLOCK), POLLIN) 50 Waitable(waiter, eventfd(0, (waiter==0) ? 0 : EFD_NONBLOCK), POLLIN), 51 fired(false) 51 52 { 52 53 assert(fd>=0); … … 67 68 if (write(fd, &one, sizeof(one))<0) { 68 69 if (errno!=EAGAIN) { 69 perror("xplcommon::posix::WaitableEvent::fire: write"); 70 assert(0); 70 setErrorCode(errno); 71 71 } 72 72 } … … 77 77 bool WaitableEvent::check() 78 78 { 79 if ( fired) {79 if (doCheck()) { 80 80 fired = false; 81 81 return true; … … 97 97 { 98 98 if ((events&POLLIN)==POLLIN) { 99 uint64_t value = 0; 100 if (read(fd, &value, sizeof(value))<0) { 101 if (errno!=EAGAIN) { 102 perror("xplcommon::posix::WaitableEvent::handleEvents: read"); 103 assert(0); 104 } 105 } else { 106 fired = value>0; 99 doCheck(); 100 } 101 } 102 103 //------------------------------------------------------------------------------ 104 105 bool WaitableEvent::doCheck(bool fromHandleEvents) 106 { 107 if (failed()) return false; 108 if (!fromHandleEvents && fired) return true; 109 110 uint64_t value = 0; 111 if (read(fd, &value, sizeof(value))<0) { 112 if (errno!=EAGAIN) { 113 setErrorCode(errno); 107 114 } 115 } else { 116 fired = fired || value>0; 108 117 } 118 119 return fired; 109 120 } 110 121
Note:
See TracChangeset
for help on using the changeset viewer.