--------------------- PatchSet 6292 Date: 2007/12/15 15:37:51 Author: chtsanti Branch: async-calls Tag: (none) Log: Adding a comm_read_cancel function which takes as argument an AsyncCall Members: src/comm.cc:1.81.4.8->1.81.4.9 src/comm.h:1.26.4.5->1.26.4.6 Index: squid3/src/comm.cc =================================================================== RCS file: /cvsroot/squid-sf//squid3/src/comm.cc,v retrieving revision 1.81.4.8 retrieving revision 1.81.4.9 diff -u -r1.81.4.8 -r1.81.4.9 --- squid3/src/comm.cc 14 Dec 2007 06:05:11 -0000 1.81.4.8 +++ squid3/src/comm.cc 15 Dec 2007 15:37:51 -0000 1.81.4.9 @@ -1,6 +1,6 @@ /* - * $Id: comm.cc,v 1.81.4.8 2007/12/14 06:05:11 rousskov Exp $ + * $Id: comm.cc,v 1.81.4.9 2007/12/15 15:37:51 chtsanti Exp $ * * DEBUG: section 5 Socket Functions * AUTHOR: Harvest Derived @@ -440,6 +440,23 @@ commSetSelect(fd, COMM_SELECT_READ, NULL, NULL, 0); } +void +comm_read_cancel(int fd, AsyncCall *callback) +{ + comm_io_callback_t *cb = COMMIO_FD_READCB(fd); + AsyncCall *call = dynamic_cast(cb->callback); + assert(call); // XXX: will fail for AsyncJob calls; see XXX above. + + /* Ok, we can be reasonably sure we won't lose any data here! */ + assert(call == callback); + + /* Delete the callback */ + commio_cancel_callback(fd, cb); + + /* And the IO event */ + commSetSelect(fd, COMM_SELECT_READ, NULL, NULL, 0); +} + /* * synchronous wrapper around udp socket functions Index: squid3/src/comm.h =================================================================== RCS file: /cvsroot/squid-sf//squid3/src/comm.h,v retrieving revision 1.26.4.5 retrieving revision 1.26.4.6 diff -u -r1.26.4.5 -r1.26.4.6 --- squid3/src/comm.h 14 Dec 2007 06:05:12 -0000 1.26.4.5 +++ squid3/src/comm.h 15 Dec 2007 15:37:51 -0000 1.26.4.6 @@ -85,6 +85,7 @@ extern void comm_read(int fd, char *buf, int len, IOCB *handler, void *data); extern void comm_read(int fd, char *buf, int len, AsyncCall *callback); extern void comm_read_cancel(int fd, IOCB *callback, void *data); +extern void comm_read_cancel(int fd, AsyncCall *callback); extern int comm_udp_recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);