本文整理汇总了C++中cbdataUnlock函数的典型用法代码示例。如果您正苦于以下问题:C++ cbdataUnlock函数的具体用法?C++ cbdataUnlock怎么用?C++ cbdataUnlock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cbdataUnlock函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: free_refreshCheckState
static void
free_refreshCheckState(void *data)
{
refreshCheckState *state = data;
storeUnlockObject(state->entry);
cbdataUnlock(state->callback_data);
cbdataUnlock(state->def);
}
示例2: free_externalAclState
static void
free_externalAclState(void *data)
{
externalAclState *state = data;
safe_free(state->key);
cbdataUnlock(state->callback_data);
cbdataUnlock(state->def);
}
示例3: externalAclHandleReply
static void
externalAclHandleReply(void *data, char *reply)
{
externalAclState *state = data;
externalAclState *next;
int result = 0;
char *status;
char *token;
char *value;
char *t;
char *user = NULL;
char *error = NULL;
external_acl_entry *entry = NULL;
debug(82, 2) ("externalAclHandleReply: reply=\"%s\"\n", reply);
if (reply) {
status = strwordtok(reply, &t);
if (status && strcmp(status, "OK") == 0)
result = 1;
while ((token = strwordtok(NULL, &t))) {
value = strchr(token, '=');
if (value) {
*value++ = '\0'; /* terminate the token, and move up to the value */
if (strcmp(token, "user") == 0)
user = value;
else if (strcmp(token, "error") == 0)
error = value;
}
}
}
dlinkDelete(&state->list, &state->def->queue);
if (cbdataValid(state->def)) {
if (reply)
entry = external_acl_cache_add(state->def, state->key, result, user, error);
else {
external_acl_entry *oldentry = hash_lookup(state->def->cache, state->key);
if (oldentry)
external_acl_cache_delete(state->def, oldentry);
}
}
do {
cbdataUnlock(state->def);
state->def = NULL;
if (cbdataValid(state->callback_data))
state->callback(state->callback_data, entry);
cbdataUnlock(state->callback_data);
state->callback_data = NULL;
next = state->queue;
cbdataFree(state);
state = next;
} while (state);
}
示例4: storeAufsIOCallback
static void
storeAufsIOCallback(storeIOState * sio, int errflag)
{
STIOCB *callback = sio->callback;
void *their_data = sio->callback_data;
squidaiostate_t *aiostate = (squidaiostate_t *) sio->fsstate;
int fd = aiostate->fd;
debug(79, 3) ("storeAufsIOCallback: errflag=%d\n", errflag);
sio->callback = NULL;
sio->callback_data = NULL;
debug(79, 9) ("%s:%d\n", __FILE__, __LINE__);
if (callback)
if (NULL == their_data || cbdataValid(their_data))
callback(their_data, errflag, sio);
debug(79, 9) ("%s:%d\n", __FILE__, __LINE__);
cbdataUnlock(their_data);
aiostate->fd = -1;
if (aiostate->flags.opening)
Opening_FD--;
cbdataFree(sio);
if (fd < 0)
return;
debug(79, 9) ("%s:%d\n", __FILE__, __LINE__);
#if ASYNC_CLOSE
fd_close(fd);
aioClose(fd);
#else
aioCancel(fd);
file_close(fd);
#endif
store_open_disk_fd--;
statCounter.syscalls.disk.closes++;
debug(79, 9) ("%s:%d\n", __FILE__, __LINE__);
}
示例5: storeClientCopy2
static void
storeClientCopy2(StoreEntry * e, store_client * sc)
{
if (sc->flags.copy_event_pending)
return;
if (EBIT_TEST(e->flags, ENTRY_FWD_HDR_WAIT)) {
debug(20, 5) ("storeClientCopy2: returning because ENTRY_FWD_HDR_WAIT set\n");
return;
}
if (sc->flags.store_copying) {
sc->flags.copy_event_pending = 1;
debug(20, 3) ("storeClientCopy2: Queueing storeClientCopyEvent()\n");
eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0.0, 0);
return;
}
cbdataLock(sc); /* ick, prevent sc from getting freed */
sc->flags.store_copying = 1;
debug(20, 3) ("storeClientCopy2: %s\n", storeKeyText(e->hash.key));
assert(sc->callback != NULL);
/*
* We used to check for ENTRY_ABORTED here. But there were some
* problems. For example, we might have a slow client (or two) and
* the server-side is reading far ahead and swapping to disk. Even
* if the server-side aborts, we want to give the client(s)
* everything we got before the abort condition occurred.
*/
storeClientCopy3(e, sc);
sc->flags.store_copying = 0;
cbdataUnlock(sc); /* ick, allow sc to be freed */
}
示例6: peerSelectCallback
static void
peerSelectCallback(ps_state * psstate)
{
StoreEntry *entry = psstate->entry;
FwdServer *fs = psstate->servers;
void *data = psstate->callback_data;
if (entry)
{
debug(44, 3) ("peerSelectCallback: %s\n", storeUrl(entry));
if (entry->ping_status == PING_WAITING)
eventDelete(peerPingTimeout, psstate);
entry->ping_status = PING_DONE;
}
if (fs == NULL)
{
debug(44, 1) ("Failed to select source for '%s'\n", storeUrl(entry));
debug(44, 1) (" always_direct = %d\n", psstate->always_direct);
debug(44, 1) (" never_direct = %d\n", psstate->never_direct);
debug(44, 1) (" timedout = %d\n", psstate->ping.timedout);
}
psstate->ping.stop = current_time;
psstate->request->hier.ping = psstate->ping;
if (cbdataValid(data))
{
psstate->servers = NULL;
psstate->callback(fs, data);
}
cbdataUnlock(data);
peerSelectStateFree(psstate);
}
示例7: peerDigestFetchFinish
/* free fetch state structures
* must be called only when fetch cbdata is valid */
static void
peerDigestFetchFinish(DigestFetchState * fetch, int err)
{
assert(fetch->entry && fetch->request);
if (fetch->old_entry) {
debug(72, 2) ("peerDigestFetchFinish: deleting old entry\n");
storeUnregister(fetch->old_entry, fetch);
storeReleaseRequest(fetch->old_entry);
storeUnlockObject(fetch->old_entry);
fetch->old_entry = NULL;
}
/* update global stats */
kb_incr(&Counter.cd.kbytes_sent, (size_t) fetch->sent.bytes);
kb_incr(&Counter.cd.kbytes_recv, (size_t) fetch->recv.bytes);
Counter.cd.msgs_sent += fetch->sent.msg;
Counter.cd.msgs_recv += fetch->recv.msg;
/* unlock everything */
storeUnregister(fetch->entry, fetch);
storeUnlockObject(fetch->entry);
requestUnlink(fetch->request);
fetch->entry = NULL;
fetch->request = NULL;
assert(fetch->pd == NULL);
cbdataUnlock(fetch);
cbdataFree(fetch);
}
示例8: peerCountMcastPeersDone
static void
peerCountMcastPeersDone(void *data)
{
ps_state *psstate = data;
peer *p = psstate->callback_data;
StoreEntry *fake = psstate->entry;
if (cbdataValid(p)) {
p->mcast.flags.counting = 0;
p->mcast.avg_n_members = doubleAverage(p->mcast.avg_n_members,
(double) psstate->ping.n_recv,
++p->mcast.n_times_counted,
10);
debug(15, 1) ("Group %s: %d replies, %4.1f average, RTT %d\n",
p->host,
psstate->ping.n_recv,
p->mcast.avg_n_members,
p->stats.rtt);
p->mcast.n_replies_expected = (int) p->mcast.avg_n_members;
}
cbdataUnlock(p);
EBIT_SET(fake->flags, ENTRY_ABORTED);
requestUnlink(fake->mem_obj->request);
fake->mem_obj->request = NULL;
storeReleaseRequest(fake);
storeUnlockObject(fake);
requestUnlink(psstate->request);
cbdataFree(psstate);
}
示例9: storeUfsReadDone
static void
storeUfsReadDone(int fd, const char *buf, int len, int errflag, void *my_data)
{
storeIOState *sio = my_data;
ufsstate_t *ufsstate = (ufsstate_t *) sio->fsstate;
STRCB *callback = sio->read.callback;
void *their_data = sio->read.callback_data;
ssize_t rlen;
debug(79, 3) ("storeUfsReadDone: dirno %d, fileno %08X, FD %d, len %d\n",
sio->swap_dirn, sio->swap_filen, fd, len);
ufsstate->flags.reading = 0;
if (errflag) {
debug(79, 3) ("storeUfsReadDone: got failure (%d)\n", errflag);
rlen = -1;
} else {
rlen = len;
sio->offset += len;
}
assert(callback);
assert(their_data);
sio->read.callback = NULL;
sio->read.callback_data = NULL;
if (cbdataValid(their_data))
callback(their_data, buf, rlen);
cbdataUnlock(their_data);
}
示例10: aioOpen
void
aioOpen(const char *path, int oflag, mode_t mode, AIOCB * callback, void *callback_data)
{
aio_ctrl_t *ctrlp;
int ret;
assert(initialised);
aio_counts.open++;
ctrlp = memPoolAlloc(aio_ctrl_pool);
ctrlp->fd = -2;
ctrlp->done_handler = callback;
ctrlp->done_handler_data = callback_data;
ctrlp->operation = _AIO_OPEN;
cbdataLock(callback_data);
if (aio_open(path, oflag, mode, &ctrlp->result) < 0) {
ret = open(path, oflag, mode);
if (callback)
(callback) (ctrlp->fd, callback_data, ret, errno);
cbdataUnlock(callback_data);
memPoolFree(aio_ctrl_pool, ctrlp);
return;
}
ctrlp->next = used_list;
used_list = ctrlp;
return;
}
示例11: aioUnlink
void
aioUnlink(const char *pathname, AIOCB * callback, void *callback_data)
{
aio_ctrl_t *ctrlp;
char *path;
assert(initialised);
aio_counts.unlink++;
ctrlp = memPoolAlloc(aio_ctrl_pool);
ctrlp->fd = -2;
ctrlp->done_handler = callback;
ctrlp->done_handler_data = callback_data;
ctrlp->operation = _AIO_UNLINK;
path = xstrdup(pathname);
cbdataLock(callback_data);
if (aio_unlink(path, &ctrlp->result) < 0) {
int ret = unlink(path);
(callback) (ctrlp->fd, callback_data, ret, errno);
cbdataUnlock(callback_data);
memPoolFree(aio_ctrl_pool, ctrlp);
xfree(path);
return;
}
ctrlp->next = used_list;
used_list = ctrlp;
xfree(path);
} /* aioUnlink */
示例12: aioStat
void
aioStat(char *path, struct stat *sb, AIOCB * callback, void *callback_data)
{
aio_ctrl_t *ctrlp;
assert(initialised);
aio_counts.stat++;
ctrlp = memPoolAlloc(aio_ctrl_pool);
ctrlp->fd = -2;
ctrlp->done_handler = callback;
ctrlp->done_handler_data = callback_data;
ctrlp->operation = _AIO_STAT;
cbdataLock(callback_data);
if (aio_stat(path, sb, &ctrlp->result) < 0) {
if (errno == ENOMEM || errno == EAGAIN || errno == EINVAL)
errno = EWOULDBLOCK;
if (callback)
(callback) (ctrlp->fd, callback_data, -1, errno);
cbdataUnlock(callback_data);
memPoolFree(aio_ctrl_pool, ctrlp);
return;
}
ctrlp->next = used_list;
used_list = ctrlp;
return;
} /* aioStat */
示例13: helperStatefulRequestFree
static void
helperStatefulRequestFree(helper_stateful_request * r)
{
cbdataUnlock(r->data);
xfree(r->buf);
memFree(r, MEM_HELPER_STATEFUL_REQUEST);
}
示例14: helperRequestFree
static void
helperRequestFree(helper_request * r)
{
cbdataUnlock(r->data);
xfree(r->buf);
memFree(r, MEM_HELPER_REQUEST);
}
示例15: idnsCheckQueue
static void
idnsCheckQueue(void *unused)
{
dlink_node *n;
dlink_node *p = NULL;
idns_query *q;
event_queued = 0;
for (n = lru_list.tail; n; n = p) {
q = n->data;
if (tvSubDsec(q->sent_t, current_time) < 5.0)
break;
debug(78, 3) ("idnsCheckQueue: ID %#04x timeout\n",
q->id);
p = n->prev;
dlinkDelete(&q->lru, &lru_list);
if (q->nsends < IDNS_MAX_TRIES) {
idnsSendQuery(q);
} else {
int v = cbdataValid(q->callback_data);
debug(78, 1) ("idnsCheckQueue: ID %x: giving up after %d tries and %5.1f seconds\n",
(int) q->id, q->nsends,
tvSubDsec(q->start_t, current_time));
cbdataUnlock(q->callback_data);
if (v)
q->callback(q->callback_data, NULL, 0);
memFree(q, MEM_IDNS_QUERY);
}
}
idnsTickleQueue();
}