diff options
| author | Manolo Gouy <Manolo> | 2011-05-31 11:20:52 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2011-05-31 11:20:52 +0000 |
| commit | bd1e9c8ca320bbbb1dbb7328ecb9edcc25c5ab9e (patch) | |
| tree | af068b9f1c0fff6342cdc647a7836f1d41274a39 /src | |
| parent | 1bef30d5030ef5fc1a94cad98b069daa92293fb2 (diff) | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_cocoa.mm | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 0df97c934..c124db7db 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -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(); } |
