]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
chardev: use per-dev context for io_add_watch_poll
authorPeter Xu <peterx@redhat.com>
Thu, 21 Sep 2017 06:35:53 +0000 (14:35 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 22 Sep 2017 19:07:27 +0000 (21:07 +0200)
It was only passed in by chr_update_read_handlers().  However when
reconnect, we'll lose that context information.  So if a chardev was
running on another context (rather than the default context, the NULL
pointer), it'll switch back to the default context if reconnection
happens.  But, it should really stick to the old context.

Convert all the callers of io_add_watch_poll() to use the internally
cached gcontext.  Then the context should be able to survive even after
reconnections.

Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <1505975754-21555-4-git-send-email-peterx@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
chardev/char-fd.c
chardev/char-pty.c
chardev/char-socket.c
chardev/char-udp.c

index 6a62a545f2513e6808d97e3a1b6ab249c0a2c5aa..09fbb078af190542a6ccc84456db5f20e7e603e0 100644 (file)
@@ -94,7 +94,7 @@ static void fd_chr_update_read_handler(Chardev *chr,
         chr->gsource = io_add_watch_poll(chr, s->ioc_in,
                                            fd_chr_read_poll,
                                            fd_chr_read, chr,
-                                           context);
+                                           chr->gcontext);
     }
 }
 
index e5d20a0e6a8454263630f8e9f41268fbf931f90f..d239c04bc3d783259ebb36f897e99bd8f01a35ae 100644 (file)
@@ -219,7 +219,7 @@ static void pty_chr_state(Chardev *chr, int connected)
             chr->gsource = io_add_watch_poll(chr, s->ioc,
                                                pty_chr_read_poll,
                                                pty_chr_read,
-                                               chr, NULL);
+                                               chr, chr->gcontext);
         }
     }
 }
index 1ae730a4cb42f48cd486e85ce18ab1da4a722477..ee71cbed5bb2ecb2ba8cfc0be88cbfdc79205c8a 100644 (file)
@@ -516,7 +516,7 @@ static void tcp_chr_connect(void *opaque)
         chr->gsource = io_add_watch_poll(chr, s->ioc,
                                            tcp_chr_read_poll,
                                            tcp_chr_read,
-                                           chr, NULL);
+                                           chr, chr->gcontext);
     }
     qemu_chr_be_event(chr, CHR_EVENT_OPENED);
 }
@@ -535,7 +535,7 @@ static void tcp_chr_update_read_handler(Chardev *chr,
         chr->gsource = io_add_watch_poll(chr, s->ioc,
                                            tcp_chr_read_poll,
                                            tcp_chr_read, chr,
-                                           context);
+                                           chr->gcontext);
     }
 }
 
index 4ee11d3ebf15219d2627dd0fda21ea362f7dec5b..106dee1a29cb55a8a4831b1a60313411282e21cb 100644 (file)
@@ -110,7 +110,7 @@ static void udp_chr_update_read_handler(Chardev *chr,
         chr->gsource = io_add_watch_poll(chr, s->ioc,
                                            udp_chr_read_poll,
                                            udp_chr_read, chr,
-                                           context);
+                                           chr->gcontext);
     }
 }