From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
"Daniel P. Berrange" <berrange@redhat.com>
Subject: [Qemu-devel] [PULL v1 06/11] io: add ability to set a name for IO channels
Date: Thu, 27 Oct 2016 14:57:33 +0200 [thread overview]
Message-ID: <20161027125738.19357-7-berrange@redhat.com> (raw)
In-Reply-To: <20161027125738.19357-1-berrange@redhat.com>
The GSource object has ability to have a name, which is useful
when debugging performance problems with the mainloop event
callbacks that take too long. By associating a name with a
QIOChannel object, we can then set the name on any GSource
associated with the channel.
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
include/glib-compat.h | 7 +++++++
include/io/channel.h | 13 +++++++++++++
io/channel.c | 24 +++++++++++++++++++-----
3 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/include/glib-compat.h b/include/glib-compat.h
index 8093163..9dfe952 100644
--- a/include/glib-compat.h
+++ b/include/glib-compat.h
@@ -304,4 +304,11 @@ static inline void g_slist_free_full(GSList *list, GDestroyNotify free_func)
}
#endif
+#if !GLIB_CHECK_VERSION(2, 26, 0)
+static inline void g_source_set_name(GSource *source, const char *name)
+{
+ /* This is just a debugging aid, so leaving it a no-op */
+}
+#endif
+
#endif
diff --git a/include/io/channel.h b/include/io/channel.h
index cf1c622..32a9470 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -79,6 +79,7 @@ typedef gboolean (*QIOChannelFunc)(QIOChannel *ioc,
struct QIOChannel {
Object parent;
unsigned int features; /* bitmask of QIOChannelFeatures */
+ char *name;
#ifdef _WIN32
HANDLE event; /* For use with GSource on Win32 */
#endif
@@ -159,6 +160,18 @@ void qio_channel_set_feature(QIOChannel *ioc,
QIOChannelFeature feature);
/**
+ * qio_channel_set_name:
+ * @ioc: the channel object
+ * @name: the name of the channel
+ *
+ * Sets the name of the channel, which serves as an aid
+ * to debugging. The name is used when creating GSource
+ * watches for this channel.
+ */
+void qio_channel_set_name(QIOChannel *ioc,
+ const char *name);
+
+/**
* qio_channel_readv_full:
* @ioc: the channel object
* @iov: the array of memory regions to read data into
diff --git a/io/channel.c b/io/channel.c
index d1f1ae5..80924c1 100644
--- a/io/channel.c
+++ b/io/channel.c
@@ -37,6 +37,14 @@ void qio_channel_set_feature(QIOChannel *ioc,
}
+void qio_channel_set_name(QIOChannel *ioc,
+ const char *name)
+{
+ g_free(ioc->name);
+ ioc->name = g_strdup(name);
+}
+
+
ssize_t qio_channel_readv_full(QIOChannel *ioc,
const struct iovec *iov,
size_t niov,
@@ -136,7 +144,13 @@ GSource *qio_channel_create_watch(QIOChannel *ioc,
GIOCondition condition)
{
QIOChannelClass *klass = QIO_CHANNEL_GET_CLASS(ioc);
- return klass->io_create_watch(ioc, condition);
+ GSource *ret = klass->io_create_watch(ioc, condition);
+
+ if (ioc->name) {
+ g_source_set_name(ret, ioc->name);
+ }
+
+ return ret;
}
@@ -282,24 +296,24 @@ void qio_channel_wait(QIOChannel *ioc,
}
-#ifdef _WIN32
static void qio_channel_finalize(Object *obj)
{
QIOChannel *ioc = QIO_CHANNEL(obj);
+ g_free(ioc->name);
+
+#ifdef _WIN32
if (ioc->event) {
CloseHandle(ioc->event);
}
-}
#endif
+}
static const TypeInfo qio_channel_info = {
.parent = TYPE_OBJECT,
.name = TYPE_QIO_CHANNEL,
.instance_size = sizeof(QIOChannel),
-#ifdef _WIN32
.instance_finalize = qio_channel_finalize,
-#endif
.abstract = true,
.class_size = sizeof(QIOChannelClass),
};
--
2.9.3
next prev parent reply other threads:[~2016-10-27 12:58 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-27 12:57 [Qemu-devel] [PULL v1 00/11] Merge qio 2016/10/27 Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 01/11] io: Fix double shift usages on QIOChannel features Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 02/11] io: Use qio_channel_has_feature() where applicable Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 03/11] io: Introduce a qio_channel_set_feature() helper Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 04/11] io: set LISTEN flag explicitly for listen sockets Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 05/11] io: Add a QIOChannelSocket cleanup test Daniel P. Berrange
2016-10-27 12:57 ` Daniel P. Berrange [this message]
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 07/11] nbd: set name for all I/O channels created Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 08/11] char: " Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 09/11] migration: " Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 10/11] vnc: " Daniel P. Berrange
2016-10-27 12:57 ` [Qemu-devel] [PULL v1 11/11] main: set names for main loop sources created Daniel P. Berrange
2016-10-27 15:10 ` [Qemu-devel] [PULL v1 00/11] Merge qio 2016/10/27 Peter Maydell
2016-10-27 15:33 ` Peter Maydell
2016-10-27 21:40 ` Daniel P. Berrange
2016-10-27 21:46 ` Peter Maydell
2016-10-28 15:31 ` Peter Maydell
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=20161027125738.19357-7-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/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.