Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
int32_t ida_fd_assign(ida_local_t * local, fd_t ** dst, fd_t * src)
{
    *dst = fd_ref(src);

    return 0;
}