#include "config-host.h"
#include "qemu-common.h"
-#include "qemu-char.h"
-#include "qemu-queue.h"
+#include "qemu/queue.h"
+#include "block/aio.h"
+#include "qemu/main-loop.h"
#ifndef _WIN32
#include <sys/wait.h>
#endif
typedef struct IOHandlerRecord {
- int fd;
IOCanReadHandler *fd_read_poll;
IOHandler *fd_read;
IOHandler *fd_write;
- int deleted;
void *opaque;
QLIST_ENTRY(IOHandlerRecord) next;
+ int fd;
+ bool deleted;
} IOHandlerRecord;
static QLIST_HEAD(, IOHandlerRecord) io_handlers =
{
IOHandlerRecord *ioh;
+ assert(fd >= 0);
+
if (!fd_read && !fd_write) {
QLIST_FOREACH(ioh, &io_handlers, next) {
if (ioh->fd == fd) {
if (ioh->fd == fd)
goto found;
}
- ioh = qemu_mallocz(sizeof(IOHandlerRecord));
+ ioh = g_malloc0(sizeof(IOHandlerRecord));
QLIST_INSERT_HEAD(&io_handlers, ioh, next);
found:
ioh->fd = fd;
ioh->fd_write = fd_write;
ioh->opaque = opaque;
ioh->deleted = 0;
+ qemu_notify_event();
}
return 0;
}
/* Do this last in case read/write handlers marked it for deletion */
if (ioh->deleted) {
QLIST_REMOVE(ioh, next);
- qemu_free(ioh);
+ g_free(ioh);
}
}
}
QLIST_FOREACH_SAFE(rec, &child_watches, next, next) {
if (waitpid(rec->pid, NULL, WNOHANG) == rec->pid) {
QLIST_REMOVE(rec, next);
- qemu_free(rec);
+ g_free(rec);
}
}
}
return 1;
}
}
- rec = qemu_mallocz(sizeof(ChildProcessRecord));
+ rec = g_malloc0(sizeof(ChildProcessRecord));
rec->pid = pid;
QLIST_INSERT_HEAD(&child_watches, rec, next);
return 0;