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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? disk.c

?? -
?? C
?? 第 1 頁 / 共 2 頁
字號:
    if (q == NULL)		/* Someone aborted then write completed */	return;    if (len == -2 && errcode == -2) {	/* Write cancelled - cleanup */	do {	    fdd->write_q = q->next;	    if (q->free_func)		(q->free_func) (q->buf);	    safe_free(q);	} while ((q = fdd->write_q));	return;    }    fd_bytes(fd, len, FD_WRITE);    if (len < 0) {	if (!ignoreErrno(errno)) {	    status = errno == ENOSPC ? DISK_NO_SPACE_LEFT : DISK_ERROR;	    debug(50, 1) ("diskHandleWrite: FD %d: disk write error: %s\n",		fd, xstrerror());	    /*	     * If there is no write callback, then this file is	     * most likely something important like a log file, or	     * an interprocess pipe.  Its not a swapfile.  We feel	     * that a write failure on a log file is rather important,	     * and Squid doesn't otherwise deal with this condition.	     * So to get the administrators attention, we exit with	     * a fatal message.	     */	    if (fdd->wrt_handle == NULL)		fatal("Write failure -- check your disk space and cache.log");	    /*	     * If there is a write failure, then we notify the	     * upper layer via the callback, at the end of this	     * function.  Meanwhile, flush all pending buffers	     * here.  Let the upper layer decide how to handle the	     * failure.  This will prevent experiencing multiple,	     * repeated write failures for the same FD because of	     * the queued data.	     */	    do {		fdd->write_q = q->next;		if (q->free_func)		    (q->free_func) (q->buf);		safe_free(q);	    } while ((q = fdd->write_q));	}	len = 0;    }    if (q != NULL) {	/* q might become NULL from write failure above */	q->buf_offset += len;	if (q->buf_offset > q->len)	    debug(50, 1) ("diskHandleWriteComplete: q->buf_offset > q->len (%p,%d, %d, %d FD %d)\n",		q, (int) q->buf_offset, q->len, len, fd);	assert(q->buf_offset <= q->len);	if (q->buf_offset == q->len) {	    /* complete write */	    fdd->write_q = q->next;	    if (q->free_func)		(q->free_func) (q->buf);	    safe_free(q);	}    }    if (fdd->write_q == NULL) {	/* no more data */	fdd->write_q_tail = NULL;	F->flags.write_daemon = 0;    } else {	/* another block is queued */	diskCombineWrites(fdd);	cbdataLock(fdd->wrt_handle_data);	commSetSelect(fd, COMM_SELECT_WRITE, diskHandleWrite, NULL, 0);	F->flags.write_daemon = 1;    }    do_close = F->flags.close_request;    if (fdd->wrt_handle) {	if (fdd->wrt_handle_data == NULL)	    do_callback = 1;	else if (cbdataValid(fdd->wrt_handle_data))	    do_callback = 1;	else	    do_callback = 0;	if (fdd->wrt_handle_data != NULL)	    cbdataUnlock(fdd->wrt_handle_data);	if (do_callback) {#ifdef OPTIMISTIC_IO	    F->flags.calling_io_handler = 1;#endif	    fdd->wrt_handle(fd, status, len, fdd->wrt_handle_data);	    /*	     * NOTE, this callback can close the FD, so we must	     * not touch 'F', 'fdd', etc. after this.	     */#ifdef OPTIMISTIC_IO	    F->flags.calling_io_handler = 0;#endif	    return;	}    }    if (do_close)	file_close(fd);}/* write block to a file *//* write back queue. Only one writer at a time. *//* call a handle when writing is complete. */voidfile_write(int fd,    off_t file_offset,    void *ptr_to_buf,    int len,    DWCB handle,    void *handle_data,    FREE * free_func){    dwrite_q *wq = NULL;    fde *F = &fd_table[fd];    assert(fd >= 0);    assert(F->flags.open);    /* if we got here. Caller is eligible to write. */    wq = xcalloc(1, sizeof(dwrite_q));    wq->file_offset = file_offset;    wq->buf = ptr_to_buf;    wq->len = len;    wq->buf_offset = 0;    wq->next = NULL;    wq->free_func = free_func;    F->disk.wrt_handle = handle;    F->disk.wrt_handle_data = handle_data;    /* add to queue */    if (F->disk.write_q == NULL) {	/* empty queue */	F->disk.write_q = F->disk.write_q_tail = wq;    } else {	F->disk.write_q_tail->next = wq;	F->disk.write_q_tail = wq;    }    if (!F->flags.write_daemon) {	cbdataLock(F->disk.wrt_handle_data);#if USE_ASYNC_IO	diskHandleWrite(fd, NULL);#else#ifdef OPTIMISTIC_IO	if (F->flags.calling_io_handler)#endif	    commSetSelect(fd, COMM_SELECT_WRITE, diskHandleWrite, NULL, 0);#ifdef OPTIMISTIC_IO	else	    diskHandleWrite(fd, NULL);#endif#endif#ifndef OPTIMISTIC_IO	F->flags.write_daemon = 1;#endif    }}/* * a wrapper around file_write to allow for MemBuf to be file_written * in a snap */voidfile_write_mbuf(int fd, off_t off, MemBuf mb, DWCB * handler, void *handler_data){    file_write(fd, off, mb.buf, mb.size, handler, handler_data, memBufFreeFunc(&mb));}/* Read from FD */static voiddiskHandleRead(int fd, void *data){    dread_ctrl *ctrl_dat = data;#if !USE_ASYNC_IO    fde *F = &fd_table[fd];    int len;#endif#ifdef OPTIMISTIC_IO    assert(!F->flags.calling_io_handler);#endif /* OPTIMISTIC_IO */    /*     * FD < 0 indicates premature close; we just have to free     * the state data.     */    if (fd < 0) {	memFree(ctrl_dat, MEM_DREAD_CTRL);	return;    }#if USE_ASYNC_IO    aioRead(fd,	ctrl_dat->offset,	ctrl_dat->buf,	ctrl_dat->req_len,	diskHandleReadComplete,	ctrl_dat);#else    if (F->disk.offset != ctrl_dat->offset) {	debug(6, 3) ("diskHandleRead: FD %d seeking to offset %d\n",	    fd, (int) ctrl_dat->offset);	lseek(fd, ctrl_dat->offset, SEEK_SET);	/* XXX ignore return? */	Counter.syscalls.disk.seeks++;	F->disk.offset = ctrl_dat->offset;    }    errno = 0;    len = read(fd, ctrl_dat->buf, ctrl_dat->req_len);    if (len > 0)	F->disk.offset += len;    diskHandleReadComplete(fd, ctrl_dat, len, errno);#endif}static voiddiskHandleReadComplete(int fd, void *data, int len, int errcode){    dread_ctrl *ctrl_dat = data;    int rc = DISK_OK;#ifdef OPTIMISTIC_IO    fde *F = &fd_table[fd];#endif /* OPTIMISTIC_IO */    Counter.syscalls.disk.reads++;    errno = errcode;    if (len == -2 && errcode == -2) {	/* Read cancelled - cleanup */	cbdataUnlock(ctrl_dat->client_data);	memFree(ctrl_dat, MEM_DREAD_CTRL);	return;    }    fd_bytes(fd, len, FD_READ);    if (len < 0) {	if (ignoreErrno(errno)) {	    commSetSelect(fd, COMM_SELECT_READ, diskHandleRead, ctrl_dat, 0);	    return;	}	debug(50, 1) ("diskHandleRead: FD %d: %s\n", fd, xstrerror());	len = 0;	rc = DISK_ERROR;    } else if (len == 0) {	rc = DISK_EOF;    }#ifdef OPTIMISTIC_IO    F->flags.calling_io_handler = 1;#endif /* OPTIMISTIC_IO */    if (cbdataValid(ctrl_dat->client_data))	ctrl_dat->handler(fd, ctrl_dat->buf, len, rc, ctrl_dat->client_data);#ifdef OPTIMISTIC_IO    F->flags.calling_io_handler = 0;#endif /* OPTIMISTIC_IO */    cbdataUnlock(ctrl_dat->client_data);    memFree(ctrl_dat, MEM_DREAD_CTRL);}/* start read operation *//* buffer must be allocated from the caller.  * It must have at least req_len space in there.  * call handler when a reading is complete. */intfile_read(int fd, char *buf, int req_len, off_t offset, DRCB * handler, void *client_data){    dread_ctrl *ctrl_dat;#ifdef OPTIMISTIC_IO    fde *F = &fd_table[fd];#endif /* OPTIMISTIC_IO */    assert(fd >= 0);    ctrl_dat = memAllocate(MEM_DREAD_CTRL);    ctrl_dat->fd = fd;    ctrl_dat->offset = offset;    ctrl_dat->req_len = req_len;    ctrl_dat->buf = buf;    ctrl_dat->end_of_file = 0;    ctrl_dat->handler = handler;    ctrl_dat->client_data = client_data;    cbdataLock(client_data);#if USE_ASYNC_IO    diskHandleRead(fd, ctrl_dat);#else#ifndef OPTIMISTIC_IO    commSetSelect(fd,	COMM_SELECT_READ,	diskHandleRead,	ctrl_dat,	0);#else    if (F->flags.calling_io_handler)	commSetSelect(fd, COMM_SELECT_READ, diskHandleRead, ctrl_dat, 0);    else	diskHandleRead(fd, ctrl_dat);#endif /* OPTIMISTIC_IO */#endif    return DISK_OK;}intdiskWriteIsComplete(int fd){    return fd_table[fd].disk.write_q ? 0 : 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美老女人第四色| 国产欧美日韩综合精品一区二区| 欧美男女性生活在线直播观看| 欧美一卡二卡三卡| 综合久久给合久久狠狠狠97色| 丝袜美腿成人在线| 成人免费毛片嘿嘿连载视频| 91精品福利在线一区二区三区| 国产精品短视频| 久久不见久久见免费视频1| 日本高清视频一区二区| 久久午夜羞羞影院免费观看| 亚洲国产视频一区二区| www.激情成人| 欧美国产激情二区三区| 男人的天堂久久精品| 欧洲一区在线电影| 亚洲免费高清视频在线| gogo大胆日本视频一区| 国产免费久久精品| 国产乱淫av一区二区三区| 欧美一区二区在线免费观看| 亚洲国产人成综合网站| 99精品视频在线播放观看| 国产免费久久精品| 国产91对白在线观看九色| 精品国产乱码久久久久久久久| 亚州成人在线电影| 欧美精品自拍偷拍| 日韩在线播放一区二区| 欧美日韩情趣电影| 日韩av电影免费观看高清完整版 | 国产欧美在线观看一区| 日本中文在线一区| 91麻豆精品国产无毒不卡在线观看| 亚洲激情图片qvod| 色婷婷久久久综合中文字幕| 亚洲色图欧美在线| 91日韩精品一区| 一区二区三区在线观看网站| 色哦色哦哦色天天综合| 亚洲一二三四久久| 在线不卡免费av| 青青草精品视频| 久久综合色综合88| 国产一本一道久久香蕉| 日本一区二区三级电影在线观看| 岛国精品在线播放| 一区二区三区在线观看网站| 欧洲在线/亚洲| 日韩成人免费电影| 日韩免费观看高清完整版| 韩国成人精品a∨在线观看| 久久久夜色精品亚洲| 国产精华液一区二区三区| 中文字幕视频一区| 欧美日韩中文字幕精品| 精品一区二区三区免费视频| 日韩电影在线免费看| 3d动漫精品啪啪一区二区竹菊| 韩国精品主播一区二区在线观看 | 国产欧美日韩在线看| 国产99久久久久| 亚洲一区二三区| 久久综合九色欧美综合狠狠| www.亚洲激情.com| 伦理电影国产精品| 亚洲天堂免费在线观看视频| 欧美乱熟臀69xxxxxx| 国产一区二区三区美女| 亚洲欧美二区三区| 欧美变态tickle挠乳网站| 91在线观看污| 精品一区二区三区免费观看| 一区二区三区在线免费| www激情久久| 欧美日韩免费高清一区色橹橹| 国产福利视频一区二区三区| 亚洲高清三级视频| 国产精品女主播av| 精品欧美一区二区久久| 欧美自拍丝袜亚洲| 成人天堂资源www在线| 日韩国产欧美在线播放| √…a在线天堂一区| 久久综合久久综合久久| 欧美午夜精品一区二区三区| 国产91在线|亚洲| 免费一级片91| 亚洲午夜免费福利视频| 1000部国产精品成人观看| 久久久久久久av麻豆果冻| 7777精品伊人久久久大香线蕉| av中文字幕在线不卡| 国产做a爰片久久毛片| 亚洲成人1区2区| 亚洲一区在线电影| 亚洲男人都懂的| 国产精品久久久久久户外露出| 精品久久久久久无| 欧美一级免费观看| 3atv一区二区三区| 欧美老女人第四色| 欧美日本一道本在线视频| 色欧美日韩亚洲| 日本黄色一区二区| 99国产精品一区| 99精品欧美一区二区蜜桃免费 | 日韩电影免费一区| 亚洲一区二区三区中文字幕在线 | 久久久久国色av免费看影院| 欧美日韩国产首页在线观看| 欧美三级三级三级| 正在播放亚洲一区| 欧美一区欧美二区| 精品福利av导航| 久久久噜噜噜久噜久久综合| 久久综合中文字幕| 国产偷国产偷精品高清尤物 | 99亚偷拍自图区亚洲| av动漫一区二区| 一本色道综合亚洲| 欧美日韩高清在线| 日韩欧美在线网站| 精品国产电影一区二区| 久久蜜桃一区二区| 国产精品成人网| 亚洲欧美日韩中文字幕一区二区三区 | 成人网在线免费视频| 粗大黑人巨茎大战欧美成人| 成人免费va视频| 97精品国产露脸对白| 国产精品久久久久影院色老大| 中文字幕一区二| 亚洲一二三四区| 久久狠狠亚洲综合| 成人免费高清视频| 欧洲一区在线观看| 欧美精品一区男女天堂| 国产精品麻豆一区二区| 亚洲成人av中文| 激情综合色综合久久综合| 国产成人h网站| 欧美色图天堂网| 精品处破学生在线二十三| 国产日韩av一区| 一级日本不卡的影视| 男男视频亚洲欧美| 不卡的av网站| 制服.丝袜.亚洲.另类.中文| 国产欧美日韩麻豆91| 一区二区三区国产精品| 九九九久久久精品| 色综合久久99| 久久综合九色综合欧美就去吻| 亚洲激情五月婷婷| 国产一区二区三区黄视频 | 一区二区三区在线视频观看58 | 国产一区二区三区在线观看免费视频| 国产毛片精品视频| 欧美午夜电影网| 久久精品免费在线观看| 亚洲国产精品影院| 成人性生交大片免费看中文| 欧美挠脚心视频网站| 国产精品福利电影一区二区三区四区| 午夜天堂影视香蕉久久| 国产成人在线视频网站| 3d成人h动漫网站入口| 亚洲人妖av一区二区| 国内成+人亚洲+欧美+综合在线| 色婷婷国产精品| 国产婷婷色一区二区三区四区| 午夜日韩在线电影| 99国产精品一区| 国产精品三级视频| 激情伊人五月天久久综合| 欧美精品色综合| 亚洲精品成人a在线观看| 成人黄色国产精品网站大全在线免费观看 | 久久精品久久综合| 欧美综合亚洲图片综合区| 欧美激情一区二区三区全黄| 另类中文字幕网| 欧美一三区三区四区免费在线看 | 欧美无砖砖区免费| 亚洲精品久久7777| 成人av电影在线播放| 久久夜色精品国产噜噜av| 免费久久精品视频| 91精品在线观看入口| 午夜激情久久久| 欧美性猛交xxxxxxxx| 亚洲一区二区三区四区不卡| 不卡的av在线播放| 免费的成人av| 日韩一级大片在线观看| 蜜臀av国产精品久久久久| 欧美一区二区三区四区高清| 亚洲mv在线观看|