X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=session.c;h=549666375ad5923e5889de906740f10ce7880daa;hb=15278f3e9cf4c4a4a6c331e042f9935709343c82;hp=bbcf5bc923172328f5b7be322f7172c3304861aa;hpb=7d2afd6c954e4b1507b494c5c0d469c2ecf59cb2;p=libsigrok.git diff --git a/session.c b/session.c index bbcf5bc9..54966637 100644 --- a/session.c +++ b/session.c @@ -145,8 +145,9 @@ static void sr_session_run_poll() * or if the poll timeout out and this source * asked for that timeout. */ - sources[i].cb(fds[i].fd, fds[i].revents, - sources[i].user_data); + if (!sources[i].cb(fds[i].fd, fds[i].revents, + sources[i].user_data)) + sr_session_source_remove(sources[i].fd); } } } @@ -289,7 +290,7 @@ void sr_session_source_remove(int fd) return; new_sources = calloc(1, sizeof(struct source) * num_sources); - for (old = 0; old < num_sources; old++) + for (old = 0, new = 0; old < num_sources; old++) if (sources[old].fd != fd) memcpy(&new_sources[new++], &sources[old], sizeof(struct source));