Fix STR #2652: Mac OS-specific bug in Fl::remove_fd().
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8771 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
1bef30d503
commit
bd1e9c8ca3
@ -238,7 +238,7 @@ public:
|
||||
pthread_mutex_init(&_datalock, NULL);
|
||||
FD_ZERO(&_fdsets[0]); FD_ZERO(&_fdsets[1]); FD_ZERO(&_fdsets[2]);
|
||||
_cancelpipe[0] = _cancelpipe[1] = 0;
|
||||
_maxfd = 0;
|
||||
_maxfd = -1;
|
||||
}
|
||||
|
||||
~DataReady()
|
||||
@ -304,12 +304,14 @@ void DataReady::AddFD(int n, int events, void (*cb)(int, void*), void *v)
|
||||
void DataReady::RemoveFD(int n, int events)
|
||||
{
|
||||
int i,j;
|
||||
_maxfd = -1; // recalculate maxfd on the fly
|
||||
for (i=j=0; i<nfds; i++) {
|
||||
if (fds[i].fd == n) {
|
||||
int e = fds[i].events & ~events;
|
||||
if (!e) continue; // if no events left, delete this fd
|
||||
fds[i].events = e;
|
||||
}
|
||||
if (fds[i].fd > _maxfd) _maxfd = fds[i].fd;
|
||||
// move it down in the array if necessary:
|
||||
if (j<i) {
|
||||
fds[j] = fds[i];
|
||||
@ -321,7 +323,6 @@ void DataReady::RemoveFD(int n, int events)
|
||||
/*LOCK*/ if (events & POLLIN) FD_CLR(n, &_fdsets[0]);
|
||||
/*LOCK*/ if (events & POLLOUT) FD_CLR(n, &_fdsets[1]);
|
||||
/*LOCK*/ if (events & POLLERR) FD_CLR(n, &_fdsets[2]);
|
||||
/*LOCK*/ if (n == _maxfd) _maxfd--;
|
||||
DataUnlock();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user