浏览代码

net: slirp: introduce a wrapper struct for QemuTimer

This struct will be extended in the next few patches to support the
new slirp_handle_timer() call.  For that we need to store an additional
"int" for each SLIRP timer, in addition to the cb_opaque.

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Reviewed-by: Marc-André Lureau <malureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo Bonzini 3 年之前
父节点
当前提交
ad2e5b87d7
共有 1 个文件被更改,包括 14 次插入5 次删除
  1. 14 5
      net/slirp.c

+ 14 - 5
net/slirp.c

@@ -184,23 +184,32 @@ static int64_t net_slirp_clock_get_ns(void *opaque)
     return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
     return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
 }
 }
 
 
+struct SlirpTimer {
+    QEMUTimer timer;
+}
+
 static void *net_slirp_timer_new(SlirpTimerCb cb,
 static void *net_slirp_timer_new(SlirpTimerCb cb,
                                  void *cb_opaque, void *opaque)
                                  void *cb_opaque, void *opaque)
 {
 {
-    return timer_new_full(NULL, QEMU_CLOCK_VIRTUAL,
-                          SCALE_MS, QEMU_TIMER_ATTR_EXTERNAL,
-                          cb, cb_opaque);
+    SlirpTimer *t = g_new(SlirpTimer, 1);
+    timer_init_full(&t->timer, NULL, QEMU_CLOCK_VIRTUAL,
+                    SCALE_MS, QEMU_TIMER_ATTR_EXTERNAL,
+                    cb, cb_opaque);
+    return t;
 }
 }
 
 
 static void net_slirp_timer_free(void *timer, void *opaque)
 static void net_slirp_timer_free(void *timer, void *opaque)
 {
 {
-    timer_free(timer);
+    SlirpTimer *t = timer;
+    timer_del(&t->timer);
+    g_free(t);
 }
 }
 
 
 static void net_slirp_timer_mod(void *timer, int64_t expire_timer,
 static void net_slirp_timer_mod(void *timer, int64_t expire_timer,
                                 void *opaque)
                                 void *opaque)
 {
 {
-    timer_mod(timer, expire_timer);
+    SlirpTimer *t = timer;
+    timer_mod(&t->timer, expire_timer);
 }
 }
 
 
 static void net_slirp_register_poll_fd(int fd, void *opaque)
 static void net_slirp_register_poll_fd(int fd, void *opaque)