Home | History | Annotate | Download | only in rpc

Lines Matching defs:fds

92 svc_fdset_print(const char *func, size_t line, struct svc_fdset *fds, 
102 fprintf(stderr, "%p[%d] fd_set<", fds->fdset, fds->fdmax);
103 for (int i = 0; i <= fds->fdmax; i++) {
104 if (!FD_ISSET(i, fds->fdset))
111 for (int i = 0; i < fds->fdused; i++) {
112 int fd = fds->fdp[i].fd;
144 svc_fdset_sanitize(struct svc_fdset *fds)
146 while (fds->fdmax >= 0 && !FD_ISSET(fds->fdmax, fds->fdset))
147 fds->fdmax--;
150 if (fds == &__svc_fdset) {
161 struct svc_fdset *fds = v;
162 DPRINTF_FDSET(fds, "free");
164 free(fds->fdp);
165 free(fds->fdset);
166 free(fds);
181 svc_pollfd_alloc(struct svc_fdset *fds)
183 if (fds->fdp != NULL)
184 return fds->fdp;
186 fds->fdnum = FD_SETSIZE;
187 fds->fdp = calloc(fds->fdnum, sizeof(*fds->fdp));
188 if (fds->fdp == NULL)
190 svc_pollfd_init(fds->fdp, fds->fdnum);
191 return fds->fdp;
196 svc_pollfd_add(int fd, struct svc_fdset *fds)
200 if ((pfd = svc_pollfd_alloc(fds)) == NULL)
203 for (int i = 0; i < fds->fdnum; i++)
205 if (i >= fds->fdused)
206 fds->fdused = i + 1;
208 fd, i, fds->fdused);
210 return fds;
213 pfd = realloc(fds->fdp, (fds->fdnum + FD_SETSIZE) * sizeof(*fds->fdp));
217 svc_pollfd_init(pfd + fds->fdnum, FD_SETSIZE);
218 pfd[fds->fdnum].fd = fd;
219 fds->fdused = fds->fdnum + 1;
220 DPRINTF("add fd=%d slot=%d fdused=%d", fd, fds->fdnum, fds->fdused);
221 fds->fdnum += FD_SETSIZE;
222 fds->fdp = pfd;
223 return fds;
227 svc_pollfd_del(int fd, struct svc_fdset *fds)
231 if ((pfd = svc_pollfd_alloc(fds)) == NULL)
234 for (int i = 0; i < fds->fdnum; i++) {
239 DPRINTF("del fd=%d slot=%d", fd, fds->fdused);
240 if (i != fds->fdused - 1)
241 return fds;
248 fds->fdused = i + 1;
249 DPRINTF("del fd=%d fdused=%d", fd, fds->fdused);
250 return fds;
257 svc_fdset_resize(int fd, struct svc_fdset *fds)
259 if (fds->fdset && fd < fds->fdsize) {
260 DPRINTF_FDSET(fds, "keeping %d < %d", fd, fds->fdsize);
261 return fds;
266 char *newfdset = realloc(fds->fdset, __NFD_BYTES(fd));
270 memset(newfdset + __NFD_BYTES(fds->fdsize), 0,
271 __NFD_BYTES(fd) - __NFD_BYTES(fds->fdsize));
274 fds->fdset = (void *)newfdset;
275 DPRINTF_FDSET(fds, "resize %d > %d", fd, fds->fdsize);
276 fds->fdsize = fd;
278 return fds;
285 struct svc_fdset *fds;
293 if ((fds = thr_getspecific(fdsetkey)) == NULL) {
295 fds = calloc(1, sizeof(*fds));
296 if (fds == NULL)
299 (void)thr_setspecific(fdsetkey, fds);
302 *fds = __svc_fdset;
303 DPRINTF("switching to %p", fds->fdset);
305 DPRINTF("first thread time %p", fds->fdset);
308 DPRINTF("again for %p", fds->fdset);
309 if (fd < fds->fdsize)
310 return fds;
313 return svc_fdset_resize(fd, fds);
336 struct svc_fdset *fds = svc_fdset_alloc(0);
337 if (fds == NULL)
339 memset(fds->fdset, 0, fds->fdsize);
340 fds->fdmax = -1;
342 free(fds->fdp);
343 fds->fdp = NULL;
344 fds->fdnum = fds->fdused = 0;
350 struct svc_fdset *fds = svc_fdset_alloc(fd);
352 if (fds == NULL)
355 FD_SET(fd, fds->fdset);
356 if (fd > fds->fdmax)
357 fds->fdmax = fd;
359 int rv = svc_pollfd_add(fd, fds) ? 0 : -1;
360 DPRINTF_FDSET(fds, "%d", fd);
362 svc_fdset_sanitize(fds);
369 struct svc_fdset *fds = svc_fdset_alloc(fd);
371 if (fds == NULL)
374 DPRINTF_FDSET(fds, "%d", fd);
376 return FD_ISSET(fd, fds->fdset) != 0;
382 struct svc_fdset *fds = svc_fdset_alloc(fd);
384 if (fds == NULL)
387 FD_CLR(fd, fds->fdset);
389 int rv = svc_pollfd_del(fd, fds) ? 0 : -1;
390 DPRINTF_FDSET(fds, "%d", fd);
392 svc_fdset_sanitize(fds);
413 struct svc_fdset *fds = svc_fdset_alloc(0);
415 if (fds == NULL)
418 DPRINTF_FDSET(fds, "get");
419 svc_fdset_sanitize(fds);
420 return fds->fdset;
426 struct svc_fdset *fds = svc_fdset_alloc(0);
428 if (fds == NULL)
431 DPRINTF_FDSET(fds, "getmax");
432 svc_fdset_sanitize(fds);
433 return &fds->fdmax;
439 struct svc_fdset *fds = svc_fdset_alloc(fd);
441 if (fds == NULL)
444 DPRINTF_FDSET(fds, "getsize");
445 return fds->fdsize;
465 struct svc_fdset *fds = svc_fdset_alloc(0);
467 if (fds == NULL)
470 DPRINTF_FDSET(fds, "getpoll");
471 return fds->fdp;
477 struct svc_fdset *fds = svc_fdset_alloc(0);
479 if (fds == NULL)
481 return &fds->fdused;
487 struct svc_fdset *fds = svc_fdset_alloc(fd);
489 if (fds == NULL)
492 DPRINTF_FDSET(fds, "getsize");
493 return fds->fdnum;