diff options
author | Peter Maydell | 2018-01-16 16:45:15 +0100 |
---|---|---|
committer | Peter Maydell | 2018-01-16 16:45:15 +0100 |
commit | c1d5b9add7b04661bedef9a3379a8b82547b53db (patch) | |
tree | 7c064b14e4a3645aedbd7d7f0009b9ee71ad9952 /chardev/char-socket.c | |
parent | Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20180116'... (diff) | |
parent | scripts/analyse-locks-simpletrace.py: script to analyse lock times (diff) | |
download | qemu-c1d5b9add7b04661bedef9a3379a8b82547b53db.tar.gz qemu-c1d5b9add7b04661bedef9a3379a8b82547b53db.tar.xz qemu-c1d5b9add7b04661bedef9a3379a8b82547b53db.zip |
Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* QemuMutex tracing improvements (Alex)
* ram_addr_t optimization (David)
* SCSI fixes (Fam, Stefan, me)
* do {} while (0) fixes (Eric)
* KVM fix for PMU (Jan)
* memory leak fixes from ASAN (Marc-André)
* migration fix for HPET, icount, loadvm (Maria, Pavel)
* hflags fixes (me, Tao)
* block/iscsi uninitialized variable (Peter L.)
* full support for GMainContexts in character devices (Peter Xu)
* more boot-serial-test (Thomas)
* Memory leak fix (Zhecheng)
# gpg: Signature made Tue 16 Jan 2018 14:15:45 GMT
# gpg: using RSA key 0xBFFBD25F78C7AE83
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>"
# gpg: aka "Paolo Bonzini <pbonzini@redhat.com>"
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1
# Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83
* remotes/bonzini/tags/for-upstream: (51 commits)
scripts/analyse-locks-simpletrace.py: script to analyse lock times
util/qemu-thread-*: add qemu_lock, locked and unlock trace events
cpu: flush TB cache when loading VMState
block/iscsi: fix initialization of iTask in iscsi_co_get_block_status
find_ram_offset: Align ram_addr_t allocation on long boundaries
find_ram_offset: Add comments and tracing
cpu_physical_memory_sync_dirty_bitmap: Another alignment fix
checkpatch: Enforce proper do/while (0) style
maint: Fix macros with broken 'do/while(0); ' usage
tests: Avoid 'do/while(false); ' in vhost-user-bridge
chardev: Clean up previous patch indentation
chardev: Use goto/label instead of do/break/while(0)
mips: Tweak location of ';' in macros
net: Drop unusual use of do { } while (0);
irq: fix memory leak
cpus: unify qemu_*_wait_io_event
icount: fixed saving/restoring of icount warp timers
scripts/qemu-gdb/timers.py: new helper to dump timer state
scripts/qemu-gdb: add simple tcg lock status helper
target-i386: update hflags on Hypervisor.framework
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'chardev/char-socket.c')
-rw-r--r-- | chardev/char-socket.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 630a7f2995..77cdf487eb 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -57,7 +57,7 @@ typedef struct { bool is_telnet; bool is_tn3270; - guint reconnect_timer; + GSource *reconnect_timer; int64_t reconnect_time; bool connect_err_reported; } SocketChardev; @@ -67,16 +67,27 @@ typedef struct { static gboolean socket_reconnect_timeout(gpointer opaque); +static void tcp_chr_reconn_timer_cancel(SocketChardev *s) +{ + if (s->reconnect_timer) { + g_source_destroy(s->reconnect_timer); + g_source_unref(s->reconnect_timer); + s->reconnect_timer = NULL; + } +} + static void qemu_chr_socket_restart_timer(Chardev *chr) { SocketChardev *s = SOCKET_CHARDEV(chr); char *name; assert(s->connected == 0); - s->reconnect_timer = g_timeout_add_seconds(s->reconnect_time, - socket_reconnect_timeout, chr); name = g_strdup_printf("chardev-socket-reconnect-%s", chr->label); - g_source_set_name_by_id(s->reconnect_timer, name); + s->reconnect_timer = qemu_chr_timeout_add_ms(chr, + s->reconnect_time * 1000, + socket_reconnect_timeout, + chr); + g_source_set_name(s->reconnect_timer, name); g_free(name); } @@ -781,11 +792,7 @@ static void char_socket_finalize(Object *obj) SocketChardev *s = SOCKET_CHARDEV(obj); tcp_chr_free_connection(chr); - - if (s->reconnect_timer) { - g_source_remove(s->reconnect_timer); - s->reconnect_timer = 0; - } + tcp_chr_reconn_timer_cancel(s); qapi_free_SocketAddress(s->addr); if (s->listener) { qio_net_listener_set_client_func(s->listener, NULL, NULL, NULL); @@ -824,7 +831,8 @@ static gboolean socket_reconnect_timeout(gpointer opaque) SocketChardev *s = SOCKET_CHARDEV(opaque); QIOChannelSocket *sioc; - s->reconnect_timer = 0; + g_source_unref(s->reconnect_timer); + s->reconnect_timer = NULL; if (chr->be_open) { return false; |