fd_t * booster_fdptr_get (booster_fdtable_t *fdtable, int fd) { fd_t *fdptr = NULL; if (fdtable == NULL || fd < 0) { gf_log ("booster-fd", GF_LOG_ERROR, "invalid argument"); errno = EINVAL; return NULL; } gf_log ("booster-fd", GF_LOG_TRACE, "FD ptr request: %d", fd); if (!(fd < fdtable->max_fds)) { gf_log ("booster-fd", GF_LOG_ERROR, "FD not in booster fd" " table"); errno = EINVAL; return NULL; } LOCK (&fdtable->lock); { fdptr = fdtable->fds[fd]; if (fdptr) fd_ref (fdptr); } UNLOCK (&fdtable->lock); return fdptr; }
int booster_fd_unused_get (booster_fdtable_t *fdtable, fd_t *fdptr, int fd) { int ret = -1; int error = 0; if (fdtable == NULL || fdptr == NULL || fd < 0) { gf_log ("booster-fd", GF_LOG_ERROR, "invalid argument"); errno = EINVAL; return -1; } gf_log ("booster-fd", GF_LOG_TRACE, "Requested fd: %d", fd); LOCK (&fdtable->lock); { while (fdtable->max_fds < fd) { error = 0; error = booster_fdtable_expand (fdtable, fdtable->max_fds + 1); if (error) { gf_log ("booster-fd", GF_LOG_ERROR, "Cannot expand fdtable:%s", strerror (error)); goto err; } } if (!fdtable->fds[fd]) { fdtable->fds[fd] = fdptr; fd_ref (fdptr); ret = fd; } else gf_log ("booster-fd", GF_LOG_ERROR, "Cannot allocate fd" " %d (slot not empty in fdtable)", fd); } err: UNLOCK (&fdtable->lock); return ret; }
int32_t ida_fd_assign(ida_local_t * local, fd_t ** dst, fd_t * src) { *dst = fd_ref(src); return 0; }