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__); }
void aioClose(int fd) { squidaio_ctrl_t *ctrlp; assert(initialised); squidaio_counts.close++; aioCancel(fd); ctrlp = memPoolAlloc(squidaio_ctrl_pool); ctrlp->fd = fd; ctrlp->done_handler = NULL; ctrlp->done_handler_data = NULL; ctrlp->operation = _AIO_CLOSE; ctrlp->result.data = ctrlp; squidaio_close(fd, &ctrlp->result); dlinkAdd(ctrlp, &ctrlp->node, &used_list); return; }
void aioClose(int fd) { aio_ctrl_t *ctrlp; assert(initialised); aio_counts.close++; aioCancel(fd); ctrlp = memPoolAlloc(aio_ctrl_pool); ctrlp->fd = fd; ctrlp->done_handler = NULL; ctrlp->done_handler_data = NULL; ctrlp->operation = _AIO_CLOSE; if (aio_close(fd, &ctrlp->result) < 0) { close(fd); /* Can't create thread - do a normal close */ memPoolFree(aio_ctrl_pool, ctrlp); aioFDWasClosed(fd); return; } ctrlp->next = used_list; used_list = ctrlp; return; }