Index: squid/src/defines.h diff -u squid/src/defines.h:1.1.1.22 squid/src/defines.h:1.1.1.22.2.1 --- squid/src/defines.h:1.1.1.22 Sun Feb 14 23:29:56 1999 +++ squid/src/defines.h Thu Mar 25 23:54:30 1999 @@ -83,7 +83,7 @@ #define DISK_OK (0) #define DISK_ERROR (-1) #define DISK_EOF (-2) -#define DISK_NO_SPACE_LEFT (-6) +#define DISK_NO_SPACE_LEFT (-10) #define DNS_INBUF_SZ 4096 Index: squid/src/ftp.c diff -u squid/src/ftp.c:1.1.1.30.2.5 squid/src/ftp.c:1.1.1.30.2.6 --- squid/src/ftp.c:1.1.1.30.2.5 Tue Mar 9 01:45:35 1999 +++ squid/src/ftp.c Thu Mar 25 23:56:23 1999 @@ -2297,6 +2297,10 @@ ftpPutTransferDone(int fd, char *bufnotused, size_t size, int errflag, void *data) { FtpStateData *ftpState = data; + if (errflag) { + ftpFailed(ftpState, ERR_WRITE_ERROR); + return; + } if (ftpState->data.fd >= 0) { comm_close(ftpState->data.fd); ftpState->data.fd = -1; Index: squid/src/pump.c diff -u squid/src/pump.c:1.1.1.13 squid/src/pump.c:1.1.1.13.2.1 --- squid/src/pump.c:1.1.1.13 Sun Feb 14 23:30:06 1999 +++ squid/src/pump.c Thu Mar 25 23:56:07 1999 @@ -67,7 +67,6 @@ static PF pumpTimeout; static PF pumpServerClosed; static DEFER pumpReadDefer; -static void pumpClose(void *data); void pumpInit(int fd, request_t * r, char *uri) @@ -177,7 +176,8 @@ PumpStateData *p = data; debug(61, 5) ("pumpServerCopy: called with size=%d\n", size); if (size < 0) { - debug(61, 5) ("pumpServerCopy: freeing and returning\n"); + debug(61, 5) ("pumpServerCopy: Failed!\n"); + pumpServerCopyComplete(p->s_fd, NULL, -1, DISK_ERROR, p); memFree(buf, MEM_4K_BUF); return; } @@ -198,25 +198,16 @@ int sfd; debug(61, 5) ("pumpServerCopyComplete: called with size=%d (%d,%d)\n", size, p->sent + size, p->cont_len); - if (errflag == COMM_ERR_CLOSING) - return; - if (errflag != 0) { - debug(61, 5) ("pumpServerCopyComplete: aborted, errflag %d\n", errflag); - pumpClose(p); - return; - } - if (EBIT_TEST(p->request_entry->flags, ENTRY_ABORTED)) { - debug(61, 5) ("pumpServerCopyComplete: ENTRY_ABORTED\n"); - pumpClose(p); - return; - } - p->sent += size; + if (size > 0) + p->sent += size; assert(p->sent <= p->cont_len); - if (p->sent < p->cont_len) { - storeClientCopy(p->request_entry, p->sent, p->sent, 4096, - memAllocate(MEM_4K_BUF), - pumpServerCopy, p); - return; + if (!errflag) { + if (p->sent < p->cont_len) { + storeClientCopy(p->request_entry, p->sent, p->sent, 4096, + memAllocate(MEM_4K_BUF), + pumpServerCopy, p); + return; + } } debug(61, 5) ("pumpServerCopyComplete: Done!\n", size); /* @@ -226,7 +217,7 @@ comm_remove_close_handler(p->s_fd, pumpServerClosed, p); p->s_fd = -1; if (cbdataValid(p->cbdata)) - p->callback(sfd, NULL, p->sent, 0, p->cbdata); + p->callback(sfd, NULL, p->sent, errflag, p->cbdata); cbdataUnlock(p->cbdata); storeUnlockObject(p->reply_entry); p->reply_entry = NULL; @@ -261,16 +252,12 @@ Config.Timeout.read); } else { debug(61, 2) ("pumpReadFromClient: aborted.\n"); - pumpClose(p); + storeAbort(req); } return; - } else if (req->mem_obj->inmem_hi == 0) { - debug(61, 2) ("pumpReadFromClient: FD %d: failed.\n", fd); - pumpClose(p); - return; } else if (p->rcvd < p->cont_len) { debug(61, 4) ("pumpReadFromClient: FD %d, incomplete request\n", fd); - pumpClose(p); + storeAbort(req); return; } if (len > 0) { @@ -309,37 +296,6 @@ } static void -pumpClose(void *data) -{ - PumpStateData *p = data; - StoreEntry *req = p->request_entry; - StoreEntry *rep = p->reply_entry; - cbdataLock(p); - debug(61, 3) ("pumpClose: %p Server FD %d, Client FD %d\n", - p, p->s_fd, p->c_fd); - /* double-call detection */ - assert(!p->flags.closing); - p->flags.closing = 1; - if (req != NULL && req->store_status == STORE_PENDING) { - storeUnregister(req, p); - } - if (rep != NULL && rep->store_status == STORE_PENDING) { - ErrorState *err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR); - fwdFail(p->fwd, err); - } - if (p->s_fd > -1) { - comm_close(p->s_fd); - p->s_fd = -1; - } - if (p->c_fd > -1) { - comm_close(p->c_fd); - } - /* This tests that pumpFree() got called somewhere */ - assert(0 == cbdataValid(p)); - cbdataUnlock(p); -} - -static void pumpFree(int fd, void *data) { PumpStateData *p = NULL; @@ -383,7 +339,7 @@ { PumpStateData *p = data; debug(61, 3) ("pumpTimeout: FD %d\n", p->c_fd); - pumpClose(p); + storeAbort(p->request_entry); } /* Index: squid/src/store_client.c diff -u squid/src/store_client.c:1.1.1.16 squid/src/store_client.c:1.1.1.16.2.1 --- squid/src/store_client.c:1.1.1.16 Sun Feb 14 23:30:09 1999 +++ squid/src/store_client.c Thu Mar 25 23:55:11 1999 @@ -239,7 +239,11 @@ #endif sc->flags.disk_io_pending = 0; sc->callback = NULL; - callback(sc->callback_data, sc->copy_buf, 0); + if (EBIT_TEST(e->flags, ENTRY_ABORTED)) { + callback(sc->callback_data, sc->copy_buf, -1); + } else { + callback(sc->callback_data, sc->copy_buf, 0); + } } else if (e->store_status == STORE_PENDING && sc->seen_offset >= mem->inmem_hi) { /* client has already seen this, wait for more */ debug(20, 3) ("storeClientCopy2: Waiting for more\n");