diff --git a/savevm.c b/savevm.c
index 57cae52..8f075e5 100644
--- a/savevm.c
+++ b/savevm.c
@@ -210,6 +210,7 @@ static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 static int socket_close(void *opaque)
 {
     QEMUFileSocket *s = opaque;
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
     close(s->fd);
     g_free(s);
     return 0;
@@ -238,6 +239,7 @@ static int stdio_pclose(void *opaque)
 {
     QEMUFileStdio *s = opaque;
     int ret;
+    qemu_set_fd_handler(fileno(s->stdio_file), NULL, NULL, NULL);
     ret = pclose(s->stdio_file);
     if (ret == -1) {
         ret = -errno;
@@ -250,6 +252,7 @@ static int stdio_fclose(void *opaque)
 {
     QEMUFileStdio *s = opaque;
     int ret = 0;
+    qemu_set_fd_handler(fileno(s->stdio_file), NULL, NULL, NULL);
     if (fclose(s->stdio_file) == EOF) {
         ret = -errno;
     }
