[jsonrpc-glib] marshalers: ensure all signals have proper marshalers
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [jsonrpc-glib] marshalers: ensure all signals have proper marshalers
- Date: Fri, 31 May 2019 19:54:06 +0000 (UTC)
commit 769635f1c070dd5bcceb011e02b20988d29d32fa
Author: Christian Hergert <chergert redhat com>
Date: Fri May 31 12:53:53 2019 -0700
marshalers: ensure all signals have proper marshalers
It's fairly trivial to avoid using generic marshalers, which come with a
memory and performance cost.
src/jsonrpc-client.c | 18 ++++++++++++------
src/jsonrpc-marshalers.list | 4 ++++
src/jsonrpc-server.c | 23 +++++++++++++----------
src/meson.build | 8 ++++++++
4 files changed, 37 insertions(+), 16 deletions(-)
---
diff --git a/src/jsonrpc-client.c b/src/jsonrpc-client.c
index 203f6f7..84b18c5 100644
--- a/src/jsonrpc-client.c
+++ b/src/jsonrpc-client.c
@@ -58,6 +58,7 @@
#include "jsonrpc-client.h"
#include "jsonrpc-input-stream.h"
#include "jsonrpc-input-stream-private.h"
+#include "jsonrpc-marshalers.h"
#include "jsonrpc-output-stream.h"
typedef struct
@@ -504,11 +505,8 @@ jsonrpc_client_class_init (JsonrpcClientClass *klass)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (JsonrpcClientClass, failed),
NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ NULL,
G_TYPE_NONE, 0);
- g_signal_set_va_marshaller (signals [FAILED],
- G_TYPE_FROM_CLASS (klass),
- g_cclosure_marshal_VOID__VOIDv);
/**
* JsonrpcClient::handle-call:
@@ -537,12 +535,16 @@ jsonrpc_client_class_init (JsonrpcClientClass *klass)
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
G_STRUCT_OFFSET (JsonrpcClientClass, handle_call),
- g_signal_accumulator_true_handled, NULL, NULL,
+ g_signal_accumulator_true_handled, NULL,
+ _jsonrpc_marshal_BOOLEAN__STRING_VARIANT_VARIANT,
G_TYPE_BOOLEAN,
3,
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
G_TYPE_VARIANT,
G_TYPE_VARIANT);
+ g_signal_set_va_marshaller (signals [HANDLE_CALL],
+ G_TYPE_FROM_CLASS (klass),
+ _jsonrpc_marshal_BOOLEAN__STRING_VARIANT_VARIANTv);
/**
* JsonrpcClient::notification:
@@ -562,11 +564,15 @@ jsonrpc_client_class_init (JsonrpcClientClass *klass)
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
G_STRUCT_OFFSET (JsonrpcClientClass, notification),
- NULL, NULL, NULL,
+ NULL, NULL,
+ _jsonrpc_marshal_VOID__STRING_VARIANT,
G_TYPE_NONE,
2,
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
G_TYPE_VARIANT);
+ g_signal_set_va_marshaller (signals [NOTIFICATION],
+ G_TYPE_FROM_CLASS (klass),
+ _jsonrpc_marshal_VOID__STRING_VARIANTv);
}
static void
diff --git a/src/jsonrpc-marshalers.list b/src/jsonrpc-marshalers.list
new file mode 100644
index 0000000..130558f
--- /dev/null
+++ b/src/jsonrpc-marshalers.list
@@ -0,0 +1,4 @@
+BOOLEAN:OBJECT,STRING,VARIANT,VARIANT
+BOOLEAN:STRING,VARIANT,VARIANT
+VOID:OBJECT,STRING,VARIANT
+VOID:STRING,VARIANT
diff --git a/src/jsonrpc-server.c b/src/jsonrpc-server.c
index 0dba394..83bba4a 100644
--- a/src/jsonrpc-server.c
+++ b/src/jsonrpc-server.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include "jsonrpc-input-stream.h"
+#include "jsonrpc-marshalers.h"
#include "jsonrpc-output-stream.h"
#include "jsonrpc-server.h"
@@ -152,13 +153,17 @@ jsonrpc_server_class_init (JsonrpcServerClass *klass)
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (JsonrpcServerClass, handle_call),
- g_signal_accumulator_true_handled, NULL, NULL,
+ g_signal_accumulator_true_handled, NULL,
+ _jsonrpc_marshal_BOOLEAN__OBJECT_STRING_VARIANT_VARIANT,
G_TYPE_BOOLEAN,
4,
JSONRPC_TYPE_CLIENT,
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
G_TYPE_VARIANT,
G_TYPE_VARIANT);
+ g_signal_set_va_marshaller (signals [HANDLE_CALL],
+ G_TYPE_FROM_CLASS (klass),
+ _jsonrpc_marshal_BOOLEAN__OBJECT_STRING_VARIANT_VARIANTv);
/**
* JsonrpcServer::notification:
@@ -176,12 +181,16 @@ jsonrpc_server_class_init (JsonrpcServerClass *klass)
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (JsonrpcServerClass, notification),
- NULL, NULL, NULL,
+ NULL, NULL,
+ _jsonrpc_marshal_VOID__OBJECT_STRING_VARIANT,
G_TYPE_NONE,
3,
JSONRPC_TYPE_CLIENT,
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
G_TYPE_VARIANT);
+ g_signal_set_va_marshaller (signals [NOTIFICATION],
+ G_TYPE_FROM_CLASS (klass),
+ _jsonrpc_marshal_VOID__OBJECT_STRING_VARIANTv);
/**
* JsonrpcServer::client-accepted:
@@ -198,13 +207,10 @@ jsonrpc_server_class_init (JsonrpcServerClass *klass)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (JsonrpcServerClass, client_accepted),
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL,
G_TYPE_NONE,
1,
JSONRPC_TYPE_CLIENT);
- g_signal_set_va_marshaller (signals [CLIENT_ACCEPTED],
- G_TYPE_FROM_CLASS (klass),
- g_cclosure_marshal_VOID__OBJECTv);
/**
* JsonrpcServer::client-closed:
@@ -221,13 +227,10 @@ jsonrpc_server_class_init (JsonrpcServerClass *klass)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (JsonrpcServerClass, client_closed),
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL,
G_TYPE_NONE,
1,
JSONRPC_TYPE_CLIENT);
- g_signal_set_va_marshaller (signals [CLIENT_CLOSED],
- G_TYPE_FROM_CLASS (klass),
- g_cclosure_marshal_VOID__OBJECTv);
}
static void
diff --git a/src/meson.build b/src/meson.build
index 83fe506..0017adc 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -14,6 +14,13 @@ jsonrpc_version_h = configure_file(
install: true,
configuration: version_data)
+marshalers = gnome.genmarshal('jsonrpc-marshalers',
+ sources: 'jsonrpc-marshalers.list',
+ prefix: '_jsonrpc_marshal',
+ valist_marshallers: true,
+ internal: true,
+)
+
libjsonrpc_glib_generated_headers = [
jsonrpc_version_h,
]
@@ -46,6 +53,7 @@ libjsonrpc_glib_sources = [
libjsonrpc_glib_generated_headers,
libjsonrpc_glib_public_headers,
libjsonrpc_glib_public_sources,
+ marshalers,
]
libjsonrpc_glib = library(
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]