示例#1
0
文件: thread.c 项目: jmptrader/cnats
natsStatus
natsThreadLocal_CreateKey(natsThreadLocal *tl, void (*destructor)(void*))
{
    int ret;

    if ((ret = pthread_key_create(tl, destructor)) != 0)
    {
        return nats_setError(NATS_SYS_ERROR,
                             "pthread_key_create error: %d", ret);
    }

    return NATS_OK;
}
示例#2
0
文件: thread.c 项目: jmptrader/cnats
natsStatus
natsThreadLocal_SetEx(natsThreadLocal tl, const void *value, bool setErr)
{
    int ret;

    if ((ret = pthread_setspecific(tl, value)) != 0)
    {
        return nats_setError(NATS_SYS_ERROR,
                             "pthread_setspecific: %d",
                             ret);
    }

    return NATS_OK;
}
示例#3
0
文件: thread.c 项目: jmptrader/cnats
natsStatus
natsThread_Create(natsThread **thread, natsThreadCb cb, void *arg)
{
    struct threadCtx    *ctx = NULL;
    natsThread          *t   = NULL;
    natsStatus          s    = NATS_OK;
    int                 err;

    ctx = (struct threadCtx*) NATS_CALLOC(1, sizeof(*ctx));
    t = (natsThread*) NATS_CALLOC(1, sizeof(natsThread));

    if ((ctx == NULL) || (t == NULL))
        s = nats_setDefaultError(NATS_NO_MEMORY);

    if (s == NATS_OK)
    {
        ctx->entry  = cb;
        ctx->arg    = arg;

        err = pthread_create(t, NULL, _threadStart, ctx);
        if (err)
            s = nats_setError(NATS_SYS_ERROR,
                              "pthread_create error: %d", errno);
    }

    if (s == NATS_OK)
    {
        *thread = t;
    }
    else
    {
        NATS_FREE(ctx);
        NATS_FREE(t);
    }

    return s;
}
示例#4
0
文件: sub.c 项目: laszlo-kiss/cnats
natsStatus
natsSubscription_SetPendingLimits(natsSubscription *sub, int msgLimit, int bytesLimit)
{
    if (sub == NULL)
        return nats_setDefaultError(NATS_INVALID_ARG);

    if ((msgLimit < 0) || (bytesLimit < 0))
        return nats_setError(NATS_INVALID_ARG, "%s", "Limits must be positive numbers");

    natsSub_Lock(sub);

    if (sub->closed)
    {
        natsSub_Unlock(sub);
        return nats_setDefaultError(NATS_INVALID_SUBSCRIPTION);
    }

    sub->msgsLimit = msgLimit;
    sub->bytesLimit = bytesLimit;

    natsSub_Unlock(sub);

    return NATS_OK;
}