亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? async_io.c

?? 代理服務器 squid-2.6.STABLE16
?? C
字號:
/* * async_io.c - some quick async IO routines for COSS * * Adrian Chadd <adrian@squid-cache.org> * * These routines are simple plugin replacements for the file_* routines * in disk.c . They back-end into the POSIX AIO routines to provide * a nice and simple async IO framework for COSS. * * AIO is suitable for COSS - the only sync operations that the standard * supports are read/write, and since COSS works on a single file * per storedir it should work just fine. * * $Id: async_io.c,v 1.14 2006/09/16 20:29:58 serassio Exp $ */#include "squid.h"#include <time.h>#if HAVE_AIO_H#include <aio.h>#endif#include "async_io.h"/* * For the time being, we kinda don't need to have our own * open/close. Just read/write (with the queueing), and callback * with the dequeueing) *//* Internal routines */#if !USE_AUFSOPS/* * find a free aio slot. * Return the index, or -1 if we can't find one. */static inta_file_findslot(async_queue_t * q){    int i;    /* Later we should use something a little more .. efficient :) */    for (i = 0; i < MAX_ASYNCOP; i++) {	if (q->aq_queue[i].aq_e_state == AQ_ENTRY_FREE)	    /* Found! */	    return i;    }    /* found nothing */    return -1;}/* Exported routines */voida_file_read(async_queue_t * q, int fd, void *buf, int req_len, off_t offset,    DRCB * callback, void *data){    int slot;    async_queue_entry_t *qe;    assert(q->aq_state == AQ_STATE_SETUP);    assert(offset >= 0);    /* Find a free slot */    slot = a_file_findslot(q);    if (slot < 0) {	/* No free slot? Callback error, and return */	debug(79, 1) ("WARNING: out of aiocb slots!\n");	/* fall back to blocking method */	file_read(fd, buf, req_len, offset, callback, data);	return;    }    /* Mark slot as ours */    qe = &q->aq_queue[slot];    qe->aq_e_state = AQ_ENTRY_USED;    qe->aq_e_callback.read = callback;    qe->aq_e_callback_data = data;    qe->aq_e_type = AQ_ENTRY_READ;    qe->aq_e_free = NULL;    qe->aq_e_buf = buf;    qe->aq_e_fd = fd;    qe->aq_e_aiocb.aio_fildes = fd;    qe->aq_e_aiocb.aio_nbytes = req_len;    qe->aq_e_aiocb.aio_offset = offset;    qe->aq_e_aiocb.aio_buf = buf;    /* Account */    q->aq_numpending++;    /* Lock */    cbdataLock(data);    /* Initiate aio */    if (aio_read(&qe->aq_e_aiocb) < 0) {	debug(79, 1) ("WARNING: aio_read() returned error: %s\n", xstrerror());	/* fall back to blocking method */	file_read(fd, buf, req_len, offset, callback, data);    }}voida_file_write(async_queue_t * q, int fd, off_t offset, void *buf, int len,    DWCB * callback, void *data, FREE * freefunc){    int slot;    async_queue_entry_t *qe;    assert(q->aq_state == AQ_STATE_SETUP);    assert(offset >= 0);    /* Find a free slot */    slot = a_file_findslot(q);    if (slot < 0) {	/* No free slot? Callback error, and return */	debug(79, 1) ("WARNING: out of aiocb slots!\n");	/* fall back to blocking method */	file_write(fd, offset, buf, len, callback, data, freefunc);	return;    }    /* Mark slot as ours */    qe = &q->aq_queue[slot];    qe->aq_e_state = AQ_ENTRY_USED;    qe->aq_e_callback.write = callback;    qe->aq_e_callback_data = data;    qe->aq_e_type = AQ_ENTRY_WRITE;    qe->aq_e_free = freefunc;    qe->aq_e_buf = buf;    qe->aq_e_fd = fd;    qe->aq_e_aiocb.aio_fildes = fd;    qe->aq_e_aiocb.aio_nbytes = len;    qe->aq_e_aiocb.aio_offset = offset;    qe->aq_e_aiocb.aio_buf = buf;    /* Account */    q->aq_numpending++;    /* Lock */    cbdataLock(data);    /* Initiate aio */    if (aio_write(&qe->aq_e_aiocb) < 0) {	debug(79, 1) ("WARNING: aio_write() returned error: %s\n", xstrerror());	/* fall back to blocking method */	file_write(fd, offset, buf, len, callback, data, freefunc);    }}/* * Note: we grab the state and free the state before calling the callback * because this allows us to cut down the amount of time it'll take * to find a free slot (since if we call the callback first, we're going * to probably be allocated the slot _after_ this one..) * * I'll make it much more optimal later. */inta_file_callback(async_queue_t * q){    int i;    int completed = 0;    int retval, reterr;    DRCB *rc;    DWCB *wc;    FREE *freefunc;    void *callback_data;    void *buf;    int fd;    async_queue_entry_t *aqe;    async_queue_entry_type_t type;    assert(q->aq_state == AQ_STATE_SETUP);    /* Loop through all slots */    for (i = 0; i < MAX_ASYNCOP; i++) {	if (q->aq_queue[i].aq_e_state == AQ_ENTRY_USED) {	    aqe = &q->aq_queue[i];	    /* Active, get status */	    reterr = aio_error(&aqe->aq_e_aiocb);	    if (reterr < 0) {		fatal("aio_error returned an error!\n");	    }	    if (reterr != EINPROGRESS) {		/* Get the return code */		retval = aio_return(&aqe->aq_e_aiocb);		/* Get the callback parameters */		callback_data = aqe->aq_e_callback_data;		freefunc = aqe->aq_e_free;		rc = aqe->aq_e_callback.read;		wc = aqe->aq_e_callback.write;		buf = aqe->aq_e_buf;		fd = aqe->aq_e_fd;		type = aqe->aq_e_type;		/* debugging assert */		assert(reterr == 0);		/* Free slot */		memset(aqe, 0, sizeof(async_queue_entry_t));		aqe->aq_e_state = AQ_ENTRY_FREE;		q->aq_numpending--;		/* Callback */		if (cbdataValid(callback_data)) {		    if (type == AQ_ENTRY_READ)			rc(fd, buf, retval, reterr, callback_data);		    if (type == AQ_ENTRY_WRITE)			wc(fd, reterr, retval, callback_data);		}		cbdataUnlock(callback_data);		if (type == AQ_ENTRY_WRITE && freefunc)		    freefunc(buf);	    }	}    }    return completed;}#endifvoida_file_setupqueue(async_queue_t * q){    /* Make sure the queue isn't setup */    assert(q->aq_state == AQ_STATE_NONE);    /* Loop through, blanking the queue entries */    /* Done */    q->aq_state = AQ_STATE_SETUP;}voida_file_syncqueue(async_queue_t * q){    assert(q->aq_state == AQ_STATE_SETUP);    /*     * Keep calling callback to complete ops until the queue is empty     * We can't quit when callback returns 0 - some calls may not     * return any completed pending events, but they're still pending!     */    while (q->aq_numpending)	a_file_callback(q);}voida_file_closequeue(async_queue_t * q){    assert(q->aq_state == AQ_STATE_SETUP);    a_file_syncqueue(q);    q->aq_state = AQ_STATE_NONE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情av综合网| 久久久久久免费网| 2020国产精品久久精品美国| 国产精品不卡在线| 久久精品国产99国产精品| 91黄色激情网站| 日本一区二区视频在线| 免费在线视频一区| 色一情一乱一乱一91av| 国产欧美va欧美不卡在线 | 欧美日韩专区在线| 中文字幕欧美激情一区| 蜜桃av一区二区在线观看| 在线这里只有精品| 国产精品福利一区二区| 精品一区二区三区免费观看| 欧美日韩一区不卡| 一区二区成人在线观看| 国产成人aaa| 精品国产精品网麻豆系列| 日韩成人精品在线观看| 欧美午夜一区二区| 国产精品久久久久久久久久免费看| 日本麻豆一区二区三区视频| 欧美日韩一卡二卡三卡 | 日韩欧美中文一区二区| 亚洲一区二区偷拍精品| 91网页版在线| 国产三级一区二区| 国产成人免费在线| 国产欧美一区二区精品婷婷| 国产一区二区三区最好精华液| 日韩三区在线观看| 久久99精品国产91久久来源| 日韩一区二区在线看| 日韩av电影免费观看高清完整版| 在线不卡中文字幕播放| 日本色综合中文字幕| 日韩一区国产二区欧美三区| 免费人成黄页网站在线一区二区| 制服丝袜中文字幕亚洲| 蜜桃av噜噜一区二区三区小说| 欧美日韩大陆在线| 日韩精品电影在线| 日韩欧美国产电影| 国产精品中文字幕日韩精品| 欧美高清在线一区| 91丝袜美腿高跟国产极品老师 | 久久久久9999亚洲精品| 国产成人精品在线看| 国产精品人妖ts系列视频| 99re在线视频这里只有精品| 亚洲欧美日韩成人高清在线一区| 欧美写真视频网站| 免费观看成人av| 久久久午夜电影| 成人av片在线观看| 天堂午夜影视日韩欧美一区二区| 日韩欧美国产wwwww| 国产呦精品一区二区三区网站| 国产欧美一区二区精品秋霞影院 | 国产欧美综合在线观看第十页 | 久草在线在线精品观看| 国产欧美一区二区精品性色| 在线亚洲欧美专区二区| 青娱乐精品在线视频| 久久久久久日产精品| 色婷婷av一区| 狠狠久久亚洲欧美| 亚洲色欲色欲www在线观看| 欧美一区二区三区婷婷月色| 丰满亚洲少妇av| 亚洲mv在线观看| 国产日韩精品一区| 欧美精品一二三| 白白色亚洲国产精品| 日韩成人av影视| 亚洲天堂网中文字| 欧美zozo另类异族| 欧洲av一区二区嗯嗯嗯啊| 六月丁香婷婷久久| 亚洲影院在线观看| 久久嫩草精品久久久久| 欧美日韩精品欧美日韩精品一综合| 韩国女主播成人在线观看| 亚洲一二三区在线观看| 久久精品一区二区三区不卡牛牛| 欧美午夜精品一区二区三区 | 天天综合网天天综合色| 中文在线一区二区| 精品sm捆绑视频| 欧美日本一区二区| 99re热视频精品| 国产福利精品一区二区| 日韩1区2区3区| 樱花影视一区二区| 国产精品狼人久久影院观看方式| 欧美一级高清片| 欧美精品在线一区二区| 91搞黄在线观看| 成人伦理片在线| 国产激情视频一区二区在线观看| 首页国产欧美久久| 亚洲国产日韩av| 亚洲一级二级在线| 夜夜嗨av一区二区三区四季av| 亚洲欧洲成人自拍| 国产精品乱码一区二区三区软件| 精品久久久影院| 日韩美女一区二区三区四区| 91.xcao| 欧美四级电影在线观看| 91色porny蝌蚪| 92国产精品观看| 91老师国产黑色丝袜在线| 成人激情动漫在线观看| 国产一区91精品张津瑜| 国产福利不卡视频| 国产不卡一区视频| 国产电影精品久久禁18| 成人中文字幕电影| av电影在线观看完整版一区二区| 成人黄色电影在线| 色综合久久中文字幕综合网 | 日韩片之四级片| 日韩欧美一区二区视频| 91精品国产高清一区二区三区 | 激情欧美一区二区| 国产福利精品导航| 91免费观看视频| 欧美性大战久久| 日韩一区二区三区精品视频 | 国产一区二区三区免费看| 国产一区二区精品久久91| 成人高清伦理免费影院在线观看| 成人av综合在线| 欧美性大战xxxxx久久久| 91精品欧美一区二区三区综合在| 欧美大肚乱孕交hd孕妇| 国产欧美一区视频| 亚洲一区二区三区不卡国产欧美| 五月婷婷综合网| 国产成人综合视频| 欧洲生活片亚洲生活在线观看| 欧美日韩黄视频| 久久午夜电影网| 综合av第一页| 三级欧美韩日大片在线看| 国精产品一区一区三区mba视频| 国产传媒一区在线| 欧美日韩在线三级| 精品人在线二区三区| 国产精品看片你懂得| 日韩电影免费在线| hitomi一区二区三区精品| 欧美男人的天堂一二区| 久久天堂av综合合色蜜桃网| 亚洲男人的天堂在线观看| 美女视频一区二区三区| 99久久免费精品高清特色大片| 欧美日韩在线三级| 国产精品久久久99| 日产国产欧美视频一区精品| 岛国精品在线观看| 制服丝袜亚洲色图| 国产精品久久久久久久久久久免费看 | 欧美日韩和欧美的一区二区| 精品不卡在线视频| 性感美女极品91精品| 成人高清视频免费观看| 日韩欧美aaaaaa| 亚洲二区在线观看| 不卡一区二区三区四区| 欧美成人三级在线| 亚洲福利一区二区三区| 91在线播放网址| 中文字幕精品综合| 久久99精品国产麻豆不卡| 欧美在线高清视频| 最好看的中文字幕久久| 国产一区二区h| 欧美成人猛片aaaaaaa| 亚洲bt欧美bt精品| 色综合天天综合给合国产| 国产校园另类小说区| 久久精品99国产精品日本| 欧美色中文字幕| 一区二区三区国产豹纹内裤在线 | 91浏览器打开| 国产精品区一区二区三| 国产麻豆9l精品三级站| 欧美v国产在线一区二区三区| 天堂成人免费av电影一区| 欧美撒尿777hd撒尿| 亚洲一二三四久久| 欧美色区777第一页| 五月综合激情日本mⅴ| 欧美日韩黄色影视| 日韩电影在线看| 日韩一区二区免费在线观看|