提交 6484e422 编写于 作者: F Fam Zheng 提交者: Stefan Hajnoczi

main-loop: Drop qemu_set_fd_handler2

All users are converted to qemu_set_fd_handler now, drop
qemu_set_fd_handler2 and IOHandlerRecord.fd_read_poll.
Signed-off-by: NFam Zheng <famz@redhat.com>
Message-id: 1433400324-7358-9-git-send-email-famz@redhat.com
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 82e1cc4b
...@@ -241,7 +241,7 @@ bool aio_dispatch(AioContext *ctx); ...@@ -241,7 +241,7 @@ bool aio_dispatch(AioContext *ctx);
bool aio_poll(AioContext *ctx, bool blocking); bool aio_poll(AioContext *ctx, bool blocking);
/* Register a file descriptor and associated callbacks. Behaves very similarly /* Register a file descriptor and associated callbacks. Behaves very similarly
* to qemu_set_fd_handler2. Unlike qemu_set_fd_handler2, these callbacks will * to qemu_set_fd_handler. Unlike qemu_set_fd_handler, these callbacks will
* be invoked when using aio_poll(). * be invoked when using aio_poll().
* *
* Code that invokes AIO completion functions should rely on this function * Code that invokes AIO completion functions should rely on this function
......
...@@ -96,8 +96,7 @@ AioContext *qemu_get_aio_context(void); ...@@ -96,8 +96,7 @@ AioContext *qemu_get_aio_context(void);
* that the main loop waits for. * that the main loop waits for.
* *
* Calling qemu_notify_event is rarely necessary, because main loop * Calling qemu_notify_event is rarely necessary, because main loop
* services (bottom halves and timers) call it themselves. One notable * services (bottom halves and timers) call it themselves.
* exception occurs when using qemu_set_fd_handler2 (see below).
*/ */
void qemu_notify_event(void); void qemu_notify_event(void);
...@@ -171,52 +170,6 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque); ...@@ -171,52 +170,6 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size); typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
typedef int IOCanReadHandler(void *opaque); typedef int IOCanReadHandler(void *opaque);
/**
* qemu_set_fd_handler2: Register a file descriptor with the main loop
*
* This function tells the main loop to wake up whenever one of the
* following conditions is true:
*
* 1) if @fd_write is not %NULL, when the file descriptor is writable;
*
* 2) if @fd_read is not %NULL, when the file descriptor is readable.
*
* @fd_read_poll can be used to disable the @fd_read callback temporarily.
* This is useful to avoid calling qemu_set_fd_handler2 every time the
* client becomes interested in reading (or dually, stops being interested).
* A typical example is when @fd is a listening socket and you want to bound
* the number of active clients. Remember to call qemu_notify_event whenever
* the condition may change from %false to %true.
*
* The callbacks that are set up by qemu_set_fd_handler2 are level-triggered.
* If @fd_read does not read from @fd, or @fd_write does not write to @fd
* until its buffers are full, they will be called again on the next
* iteration.
*
* @fd: The file descriptor to be observed. Under Windows it must be
* a #SOCKET.
*
* @fd_read_poll: A function that returns 1 if the @fd_read callback
* should be fired. If the function returns 0, the main loop will not
* end its iteration even if @fd becomes readable.
*
* @fd_read: A level-triggered callback that is fired if @fd is readable
* at the beginning of a main loop iteration, or if it becomes readable
* during one.
*
* @fd_write: A level-triggered callback that is fired when @fd is writable
* at the beginning of a main loop iteration, or if it becomes writable
* during one.
*
* @opaque: A pointer-sized value that is passed to @fd_read_poll,
* @fd_read and @fd_write.
*/
int qemu_set_fd_handler2(int fd,
IOCanReadHandler *fd_read_poll,
IOHandler *fd_read,
IOHandler *fd_write,
void *opaque);
/** /**
* qemu_set_fd_handler: Register a file descriptor with the main loop * qemu_set_fd_handler: Register a file descriptor with the main loop
* *
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#endif #endif
typedef struct IOHandlerRecord { typedef struct IOHandlerRecord {
IOCanReadHandler *fd_read_poll;
IOHandler *fd_read; IOHandler *fd_read;
IOHandler *fd_write; IOHandler *fd_write;
void *opaque; void *opaque;
...@@ -46,14 +45,10 @@ typedef struct IOHandlerRecord { ...@@ -46,14 +45,10 @@ typedef struct IOHandlerRecord {
static QLIST_HEAD(, IOHandlerRecord) io_handlers = static QLIST_HEAD(, IOHandlerRecord) io_handlers =
QLIST_HEAD_INITIALIZER(io_handlers); QLIST_HEAD_INITIALIZER(io_handlers);
int qemu_set_fd_handler(int fd,
/* XXX: fd_read_poll should be suppressed, but an API change is IOHandler *fd_read,
necessary in the character devices to suppress fd_can_read(). */ IOHandler *fd_write,
int qemu_set_fd_handler2(int fd, void *opaque)
IOCanReadHandler *fd_read_poll,
IOHandler *fd_read,
IOHandler *fd_write,
void *opaque)
{ {
IOHandlerRecord *ioh; IOHandlerRecord *ioh;
...@@ -75,7 +70,6 @@ int qemu_set_fd_handler2(int fd, ...@@ -75,7 +70,6 @@ int qemu_set_fd_handler2(int fd,
QLIST_INSERT_HEAD(&io_handlers, ioh, next); QLIST_INSERT_HEAD(&io_handlers, ioh, next);
found: found:
ioh->fd = fd; ioh->fd = fd;
ioh->fd_read_poll = fd_read_poll;
ioh->fd_read = fd_read; ioh->fd_read = fd_read;
ioh->fd_write = fd_write; ioh->fd_write = fd_write;
ioh->opaque = opaque; ioh->opaque = opaque;
...@@ -86,14 +80,6 @@ int qemu_set_fd_handler2(int fd, ...@@ -86,14 +80,6 @@ int qemu_set_fd_handler2(int fd,
return 0; return 0;
} }
int qemu_set_fd_handler(int fd,
IOHandler *fd_read,
IOHandler *fd_write,
void *opaque)
{
return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
}
void qemu_iohandler_fill(GArray *pollfds) void qemu_iohandler_fill(GArray *pollfds)
{ {
IOHandlerRecord *ioh; IOHandlerRecord *ioh;
...@@ -103,9 +89,7 @@ void qemu_iohandler_fill(GArray *pollfds) ...@@ -103,9 +89,7 @@ void qemu_iohandler_fill(GArray *pollfds)
if (ioh->deleted) if (ioh->deleted)
continue; continue;
if (ioh->fd_read && if (ioh->fd_read) {
(!ioh->fd_read_poll ||
ioh->fd_read_poll(ioh->opaque) != 0)) {
events |= G_IO_IN | G_IO_HUP | G_IO_ERR; events |= G_IO_IN | G_IO_HUP | G_IO_ERR;
} }
if (ioh->fd_write) { if (ioh->fd_write) {
......
...@@ -8,12 +8,3 @@ int qemu_set_fd_handler(int fd, ...@@ -8,12 +8,3 @@ int qemu_set_fd_handler(int fd,
{ {
abort(); abort();
} }
int qemu_set_fd_handler2(int fd,
IOCanReadHandler *fd_read_poll,
IOHandler *fd_read,
IOHandler *fd_write,
void *opaque)
{
abort();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册