From bd20f5aabe5f105bec15a9b9bec8134e0465041e Mon Sep 17 00:00:00 2001 From: Slava Monich Date: Fri, 22 Feb 2019 00:12:17 +0200 Subject: [PATCH] [gbinder-radio] Optimize radio_instance_response() ... by using gbinder_reader_read_hidl_struct() instead of gbinder_reader_read_buffer(). The former doesn't allocate anything - it returns direct pointer to the memory block associated with the transaction. --- rpm/libgbinder-radio.spec | 3 ++- src/radio_instance.c | 9 +++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/rpm/libgbinder-radio.spec b/rpm/libgbinder-radio.spec index a7cdf59..6ceae08 100644 --- a/rpm/libgbinder-radio.spec +++ b/rpm/libgbinder-radio.spec @@ -8,7 +8,8 @@ URL: https://github.com/mer-hybris/libgbinder-radio Source: %{name}-%{version}.tar.bz2 BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(libglibutil) -BuildRequires: pkgconfig(libgbinder) +BuildRequires: pkgconfig(libgbinder) >= 1.0.9 +Requires: libgbinder >= 1.0.9 Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig diff --git a/src/radio_instance.c b/src/radio_instance.c index 4c8fc9a..a976288 100644 --- a/src/radio_instance.c +++ b/src/radio_instance.c @@ -217,14 +217,12 @@ radio_instance_response( } else { /* All other responses have RadioResponseInfo */ GBinderReader reader; - GBinderBuffer* buf; + const RadioResponseInfo* info; gbinder_remote_request_init_reader(req, &reader); - buf = gbinder_reader_read_buffer(&reader); - GASSERT(buf && buf->size == sizeof(RadioResponseInfo)); - if (buf && buf->size == sizeof(RadioResponseInfo)) { + info = gbinder_reader_read_hidl_struct(&reader, RadioResponseInfo); + if (info) { GQuark quark = radio_instance_resp_quark(self, code); - const RadioResponseInfo* info = buf->data; gboolean handled = FALSE; g_signal_emit(self, @@ -238,7 +236,6 @@ radio_instance_response( radio_instance_ack(self); } } - gbinder_buffer_free(buf); } *status = GBINDER_STATUS_OK; } else {