All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
To: qemu-devel@nongnu.org, peter.maydell@linaro.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
	stefanha@redhat.com, jan.kiszka@siemens.com,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Samuel Thibault" <samuel.thibault@ens-lyon.org>
Subject: [Qemu-devel] [PULLv3 13/32] slirp: add unregister_poll_fd() callback
Date: Tue,  5 Feb 2019 20:28:29 +0200	[thread overview]
Message-ID: <20190205182848.29887-14-samuel.thibault@ens-lyon.org> (raw)
In-Reply-To: <20190205182848.29887-1-samuel.thibault@ens-lyon.org>

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Add a counter-part to register_poll_fd() for completeness.

(so far, register_poll_fd() is called only on struct socket fd)

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      | 6 ++++++
 slirp/ip_icmp.c  | 1 +
 slirp/libslirp.h | 2 ++
 slirp/slirp.c    | 3 ++-
 slirp/tcp_subr.c | 2 ++
 slirp/udp.c      | 1 +
 6 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/net/slirp.c b/net/slirp.c
index 6f756a4dcc..78ba96b63f 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -191,6 +191,11 @@ static void net_slirp_register_poll_fd(int fd)
     qemu_fd_register(fd);
 }
 
+static void net_slirp_unregister_poll_fd(int fd)
+{
+    /* no qemu_fd_unregister */
+}
+
 static const SlirpCb slirp_cb = {
     .output = net_slirp_output,
     .guest_error = net_slirp_guest_error,
@@ -199,6 +204,7 @@ static const SlirpCb slirp_cb = {
     .timer_free = net_slirp_timer_free,
     .timer_mod = net_slirp_timer_mod,
     .register_poll_fd = net_slirp_register_poll_fd,
+    .unregister_poll_fd = net_slirp_unregister_poll_fd,
 };
 
 static int net_slirp_init(NetClientState *peer, const char *model,
diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c
index b59daa801d..19e247f773 100644
--- a/slirp/ip_icmp.c
+++ b/slirp/ip_icmp.c
@@ -114,6 +114,7 @@ static int icmp_send(struct socket *so, struct mbuf *m, int hlen)
 
 void icmp_detach(struct socket *so)
 {
+    so->slirp->cb->unregister_poll_fd(so->s);
     slirp_closesocket(so->s);
     sofree(so);
 }
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 70e99139bf..8ce69f0be3 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -29,6 +29,8 @@ typedef struct SlirpCb {
     void (*timer_mod)(void *timer, int64_t expire_time);
     /* Register a fd for future polling */
     void (*register_poll_fd)(int fd);
+    /* Unregister a fd */
+    void (*unregister_poll_fd)(int fd);
 } SlirpCb;
 
 
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 12677e5da7..f0bd59fd6f 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1015,7 +1015,8 @@ int slirp_remove_hostfwd(Slirp *slirp, int is_udp, struct in_addr host_addr,
             getsockname(so->s, (struct sockaddr *)&addr, &addr_len) == 0 &&
             addr.sin_addr.s_addr == host_addr.s_addr &&
             addr.sin_port == port) {
-            close(so->s);
+            so->slirp->cb->unregister_poll_fd(so->s);
+            slirp_closesocket(so->s);
             sofree(so);
             return 0;
         }
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 8087ffc047..d8846a33b0 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -337,6 +337,7 @@ tcp_close(struct tcpcb *tp)
 	/* clobber input socket cache if we're closing the cached connection */
 	if (so == slirp->tcp_last_so)
 		slirp->tcp_last_so = &slirp->tcb;
+	so->slirp->cb->unregister_poll_fd(so->s);
 	slirp_closesocket(so->s);
 	sbfree(&so->so_rcv);
 	sbfree(&so->so_snd);
@@ -498,6 +499,7 @@ void tcp_connect(struct socket *inso)
     /* Close the accept() socket, set right state */
     if (inso->so_state & SS_FACCEPTONCE) {
         /* If we only accept once, close the accept() socket */
+        so->slirp->cb->unregister_poll_fd(so->s);
         slirp_closesocket(so->s);
 
         /* Don't select it yet, even though we have an FD */
diff --git a/slirp/udp.c b/slirp/udp.c
index 6c3fb9a29f..3915971b50 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -292,6 +292,7 @@ udp_attach(struct socket *so, unsigned short af)
 void
 udp_detach(struct socket *so)
 {
+	so->slirp->cb->unregister_poll_fd(so->s);
 	slirp_closesocket(so->s);
 	sofree(so);
 }
-- 
2.20.1

  parent reply	other threads:[~2019-02-05 18:29 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-05 18:28 [Qemu-devel] [PULLv3 00/32] More work towards libslirp Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 01/32] slirp: Avoid unaligned 16bit memory access Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 02/32] slirp: Avoid marking naturally packed structs as QEMU_PACKED Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 03/32] slirp: Don't mark struct ipq or struct ipasfrag as packed Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 04/32] slirp: generalize guestfwd with a callback based approach Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 05/32] net/slirp: simplify checking for cmd: prefix Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 06/32] net/slirp: free forwarding rules on cleanup Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 07/32] net/slirp: fix leaks on forwarding rule registration error Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 08/32] slirp: add callbacks for timer Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 09/32] slirp: replace trace functions with DEBUG calls Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 10/32] slirp: replace QEMU_PACKED with SLIRP_PACKED Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 11/32] slirp: replace most qemu socket utilities with slirp own version Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 12/32] slirp: replace qemu_set_nonblock() Samuel Thibault
2019-02-05 18:28 ` Samuel Thibault [this message]
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 14/32] slirp: replace qemu_notify_event() with a callback Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 15/32] slirp: move QEMU state saving to a separate unit Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 16/32] slirp: do not include qemu headers in libslirp.h public API header Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 17/32] slirp: improve windows headers inclusion Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 18/32] slirp: add slirp own version of pstrcpy Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 19/32] slirp: remove qemu timer.h dependency Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 20/32] slirp: remove now useless QEMU headers inclusions Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 21/32] slirp: replace net/eth.h inclusion with own defines Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 22/32] slirp: replace qemu qtailq with slirp own copy Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 23/32] slirp: replace QEMU_BUILD_BUG_ON with G_STATIC_ASSERT Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 24/32] slirp: Move g_spawn_async_with_fds_qemu compatibility to slirp/ Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 25/32] slirp: replace remaining qemu headers dependency Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 26/32] slirp: prefer c99 types over BSD kind Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 27/32] slirp: improve send_packet() callback Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 28/32] slirp: replace global polling with per-instance & notifier Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 29/32] slirp: remove slirp_instances list Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 30/32] slirp: use polling callbacks, drop glib requirement Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 31/32] slirp: pass opaque to all callbacks Samuel Thibault
2019-02-05 18:28 ` [Qemu-devel] [PULLv3 32/32] slirp: API is extern C Samuel Thibault
2019-02-05 20:15 ` [Qemu-devel] [PULLv3 00/32] More work towards libslirp no-reply
2019-02-05 20:19 ` no-reply
2019-02-07 11:46 ` Peter Maydell
2019-02-07 11:53   ` Daniel P. Berrangé
2019-02-07 13:29   ` Samuel Thibault
2019-02-07 13:52     ` Marc-André Lureau
2019-02-07 13:53       ` Peter Maydell
2019-02-07 14:42     ` Daniel P. Berrangé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190205182848.29887-14-samuel.thibault@ens-lyon.org \
    --to=samuel.thibault@ens-lyon.org \
    --cc=jan.kiszka@siemens.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.