本文整理汇总了C++中cbdataUnlock函数的典型用法代码示例。如果您正苦于以下问题:C++ cbdataUnlock函数的具体用法?C++ cbdataUnlock怎么用?C++ cbdataUnlock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cbdataUnlock函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: free_refreshCheckState
static void
free_refreshCheckState(void *data)
{
refreshCheckState *state = data;
storeUnlockObject(state->entry);
cbdataUnlock(state->callback_data);
cbdataUnlock(state->def);
}
开发者ID:cristdai,项目名称:squid2,代码行数:8,代码来源:refresh_check.c
示例2: free_externalAclState
static void
free_externalAclState(void *data)
{
externalAclState *state = data;
safe_free(state->key);
cbdataUnlock(state->callback_data);
cbdataUnlock(state->def);
}
开发者ID:miettal,项目名称:armadillo420_standard,代码行数:8,代码来源:external_acl.c
示例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);
}
开发者ID:miettal,项目名称:armadillo420_standard,代码行数:56,代码来源:external_acl.c
示例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__);
}
开发者ID:selecli,项目名称:squid,代码行数:34,代码来源:store_io_aufs.c
示例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 */
}
开发者ID:cqkxboy168,项目名称:squid_videocache,代码行数:30,代码来源:store_client.c
示例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);
}
开发者ID:selecli,项目名称:squid,代码行数:30,代码来源:peer_select.c
示例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);
}
开发者ID:BackupTheBerlios,项目名称:wl530g-svn,代码行数:30,代码来源:peer_digest.c
示例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);
}
开发者ID:CoolerVoid,项目名称:squid,代码行数:28,代码来源:neighbors.c
示例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);
}
开发者ID:cristdai,项目名称:squid2,代码行数:27,代码来源:store_io_ufs.c
示例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;
}
开发者ID:BackupTheBerlios,项目名称:wl530g-svn,代码行数:26,代码来源:async_io.c
示例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 */
开发者ID:BackupTheBerlios,项目名称:wl530g-svn,代码行数:26,代码来源:async_io.c
示例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 */
开发者ID:BackupTheBerlios,项目名称:wl530g-svn,代码行数:26,代码来源:async_io.c
示例13: helperStatefulRequestFree
static void
helperStatefulRequestFree(helper_stateful_request * r)
{
cbdataUnlock(r->data);
xfree(r->buf);
memFree(r, MEM_HELPER_STATEFUL_REQUEST);
}
开发者ID:miettal,项目名称:armadillo420_standard,代码行数:7,代码来源:helper.c
示例14: helperRequestFree
static void
helperRequestFree(helper_request * r)
{
cbdataUnlock(r->data);
xfree(r->buf);
memFree(r, MEM_HELPER_REQUEST);
}
开发者ID:miettal,项目名称:armadillo420_standard,代码行数:7,代码来源:helper.c
示例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();
}
开发者ID:UTSASRG,项目名称:DoubleTake,代码行数:30,代码来源:dns_internal.c
示例16: requestDestroy
void
requestDestroy(request_t * req)
{
assert(req);
if (req->body_reader)
requestAbortBody(req);
if (req->auth_user_request)
authenticateAuthUserRequestUnlock(req->auth_user_request);
safe_free(req->canonical);
safe_free(req->vary_hdr);
safe_free(req->vary_headers);
stringClean(&req->vary_encoding);
safe_free(req->urlgroup);
safe_free(req->extacl_user);
safe_free(req->extacl_passwd);
stringClean(&req->urlpath);
httpHeaderClean(&req->header);
if (req->cache_control)
httpHdrCcDestroy(req->cache_control);
if (req->range)
httpHdrRangeDestroy(req->range);
stringClean(&req->extacl_log);
if (req->vary) {
if (req->etags == &req->vary->etags)
req->etags = NULL;
storeLocateVaryDone(req->vary);
req->vary = NULL;
}
assert(req->etags == NULL);
safe_free(req->etag);
if (req->pinned_connection)
cbdataUnlock(req->pinned_connection);
req->pinned_connection = NULL;
memFree(req, MEM_REQUEST_T);
}
开发者ID:arthurtumanyan,项目名称:squid-2.6-stable13-shaga,代码行数:35,代码来源:HttpRequest.c
示例17: storeDiskdCreate
storeIOState *
storeDiskdCreate(SwapDir * SD, StoreEntry * e, STFNCB * file_callback,
STIOCB * callback, void *callback_data)
{
sfileno f;
int x;
storeIOState *sio;
char *buf;
int shm_offset;
diskdinfo_t *diskdinfo = SD->fsdata;
diskdstate_t *diskdstate;
/*
* Fail on open() if there are too many requests queued.
*/
if (diskdinfo->away > diskdinfo->magic1) {
diskd_stats.open_fail_queue_len++;
return NULL;
}
/* Allocate a number */
f = storeDiskdDirMapBitAllocate(SD);
debug(79, 3) ("storeDiskdCreate: fileno %08X\n", f);
CBDATA_INIT_TYPE_FREECB(storeIOState, storeDiskdIOFreeEntry);
sio = cbdataAlloc(storeIOState);
sio->fsstate = diskdstate = memPoolAlloc(diskd_state_pool);
sio->swap_filen = f;
sio->swap_dirn = SD->index;
sio->mode = O_WRONLY | O_CREAT | O_TRUNC;
sio->callback = callback;
sio->callback_data = callback_data;
sio->e = e;
cbdataLock(callback_data);
diskdstate->flags.writing = 0;
diskdstate->flags.reading = 0;
diskdstate->flags.close_request = 0;
diskdstate->id = diskd_stats.sio_id++;
buf = storeDiskdShmGet(SD, &shm_offset);
xstrncpy(buf, storeDiskdDirFullPath(SD, f, NULL), SHMBUF_BLKSZ);
x = storeDiskdSend(_MQD_OPEN,
SD,
diskdstate->id,
sio,
strlen(buf) + 1,
sio->mode,
shm_offset);
if (x < 0) {
debug(79, 1) ("storeDiskdSend OPEN: %s\n", xstrerror());
storeDiskdShmPut(SD, shm_offset);
cbdataUnlock(sio->callback_data);
cbdataFree(sio);
return NULL;
}
storeDiskdDirReplAdd(SD, e);
diskd_stats.create.ops++;
return sio;
}
开发者ID:KimTaehee,项目名称:HappyStream,代码行数:59,代码来源:store_io_diskd.c
示例18: free_external_acl_data
static void
free_external_acl_data(void *data)
{
external_acl_data *p = data;
wordlistDestroy(&p->arguments);
cbdataUnlock(p->def);
p->def = NULL;
}
开发者ID:miettal,项目名称:armadillo420_standard,代码行数:8,代码来源:external_acl.c
示例19: freePeerMonitor
static void
freePeerMonitor(void *data)
{
PeerMonitor *pm = data;
if (cbdataValid(pm->peer))
pm->peer->monitor.data = NULL;
cbdataUnlock(pm->peer);
pm->peer = NULL;
}
开发者ID:KimTaehee,项目名称:HappyStream,代码行数:9,代码来源:peer_monitor.c
示例20: storeDiskdHandle
void
storeDiskdHandle(diomsg * M)
{
int valid = M->callback_data ? cbdataValid(M->callback_data) : 1;
if (M->callback_data)
cbdataUnlock(M->callback_data);
if (!valid) {
debug(79, 3) ("storeDiskdHandle: Invalid callback_data %p\n",
M->callback_data);
/*
* The read operation has its own callback. If we don't
* call storeDiskdReadDone(), then we must make sure the
* callback_data gets unlocked!
*/
if (_MQD_READ == M->mtype) {
storeIOState *sio = M->callback_data;
cbdataUnlock(sio->read.callback_data);
}
return;
}
/* set errno passed from diskd. makes debugging more meaningful */
if (M->status < 0)
errno = -M->status;
switch (M->mtype) {
case _MQD_OPEN:
storeDiskdOpenDone(M);
break;
case _MQD_CLOSE:
storeDiskdCloseDone(M);
break;
case _MQD_READ:
storeDiskdReadDone(M);
break;
case _MQD_WRITE:
storeDiskdWriteDone(M);
break;
case _MQD_UNLINK:
storeDiskdUnlinkDone(M);
break;
default:
assert(0);
break;
}
}
开发者ID:KimTaehee,项目名称:HappyStream,代码行数:44,代码来源:store_io_diskd.c
注:本文中的cbdataUnlock函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论