Couchbase
view release on metacpan or search on metacpan
xs/callbacks.c view on Meta::CPAN
fmtflags = SvUV(fmtspec);
}
body = plcb_convert_retrieval_ex(parent, resobj,
htresp->body, htresp->nbody, fmtflags,
PLCB_CONVERT_NOCUSTOM);
av_store(resobj, PLCB_RETIDX_VALUE, body);
}
break;
}
default:
abort();
break;
}
ctx->nremaining--;
if (parent->async) {
call_async(ctx, resobj);
} else if (ctx->flags & PLCB_OPCTXf_WAITONE) {
av_push(ctx->u.ctxqueue, newRV_inc( (SV* )resobj));
plcb_kv_waitdone(parent);
}
if (!ctx->nremaining) {
SvREFCNT_dec(ctxrv);
plcb_kv_waitdone(parent);
plcb_opctx_clear(parent);
}
}
static void
bootstrap_callback(lcb_t instance, lcb_error_t status)
{
dSP;
PLCB_t *obj = (PLCB_t*) lcb_get_cookie(instance);
if (!obj->async) {
return;
}
if (!obj->conncb) {
warn("Object %p does not have a connect callback!", obj);
return;
}
printf("Invoking callback for connect..!\n");
ENTER;SAVETMPS;PUSHMARK(SP);
XPUSHs(sv_2mortal(newRV_inc(obj->selfobj)));
XPUSHs(sv_2mortal(newSViv(status)));
PUTBACK;
call_sv(obj->conncb, G_DISCARD);
SPAGAIN;
FREETMPS;LEAVE;
SvREFCNT_dec(obj->conncb); obj->conncb = NULL;
}
void
plcb_callbacks_setup(PLCB_t *object)
{
lcb_t o = object->instance;
lcb_install_callback3(o, LCB_CALLBACK_GET, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_GETREPLICA, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_STORE, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_TOUCH, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_REMOVE, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_COUNTER, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_UNLOCK, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_ENDURE, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_STATS, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_OBSERVE, callback_common);
lcb_install_callback3(o, LCB_CALLBACK_HTTP, callback_common);
lcb_set_bootstrap_callback(o, bootstrap_callback);
}
( run in 0.868 second using v1.01-cache-2.11-cpan-39bf76dae61 )