diff options
author | Christophe Fergeau <cfergeau@redhat.com> | 2016-01-21 14:14:57 +0100 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2016-01-21 14:19:24 +0000 |
commit | 6e407a81df330490412cc8c480f7db4e4e85a969 (patch) | |
tree | a4bad4a80d801ce7b6cfa6102799bbf2c6a5b99b | |
parent | 4b923347b7aae3120c5b31168ccb7d5c88c07462 (diff) |
event-loop: Remove template
Since SpiceCoreInterfaceInternal is a private data structure, we can
extend it as we see fit without breaking ABI. In particular, adding a
GMainContext member to it allows us to remove the need for
the event loop template which is currently included in the
basic_event_loop.c test file.
Acked-by: Frediano Ziglio <fziglio@redhat.com>
-rw-r--r-- | server/Makefile.am | 2 | ||||
-rw-r--r-- | server/event-loop.c (renamed from server/event-loop.tmpl.c) | 20 | ||||
-rw-r--r-- | server/red-common.h | 4 | ||||
-rw-r--r-- | server/tests/Makefile.am | 6 | ||||
-rw-r--r-- | server/tests/basic_event_loop.c | 11 |
5 files changed, 15 insertions, 28 deletions
diff --git a/server/Makefile.am b/server/Makefile.am index bef999d1..92b716f5 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -70,6 +70,7 @@ libserver_la_SOURCES = \ char-device.c \ char-device.h \ demarshallers.h \ + event-loop.c \ glz-encoder.c \ glz-encoder.h \ glz-encoder-dict.c \ @@ -159,7 +160,6 @@ EXTRA_DIST = \ cache-item.tmpl.c \ glz-encode-match.tmpl.c \ glz-encode.tmpl.c \ - event-loop.tmpl.c \ spice-server.syms \ $(NULL) diff --git a/server/event-loop.tmpl.c b/server/event-loop.c index 9d253d9a..4738ed99 100644 --- a/server/event-loop.tmpl.c +++ b/server/event-loop.c @@ -16,18 +16,10 @@ License along with this library; if not, see <http://www.gnu.org/licenses/>. */ -/* This is a template file to implement event loop using GLib one. - * - * Is implemented as a template file to avoid some linker problem. - * - * This file export a variable: +/* + *This file export a global variable: * * SpiceCoreInterfaceInternal event_loop_core; - * - * You should also define some functions like: - * - * GMainContext *event_loop_context_from_iface(const SpiceCoreInterfaceInternal *opaque); - * void event_loop_channel_event(int event, SpiceChannelEventInfo *info); */ #include "red-common.h" @@ -44,7 +36,7 @@ static SpiceTimer* timer_add(const SpiceCoreInterfaceInternal *iface, { SpiceTimer *timer = spice_malloc0(sizeof(SpiceTimer)); - timer->context = event_loop_context_from_iface(iface); + timer->context = iface->main_context; timer->func = func; timer->opaque = opaque; @@ -157,7 +149,7 @@ static SpiceWatch *watch_add(const SpiceCoreInterfaceInternal *iface, spice_return_val_if_fail(func != NULL, NULL); watch = spice_malloc0(sizeof(SpiceWatch)); - watch->context = event_loop_context_from_iface(iface); + watch->context = iface->main_context; watch->channel = g_io_channel_unix_new(fd); watch->func = func; watch->opaque = opaque; @@ -176,7 +168,7 @@ static void watch_remove(SpiceWatch *watch) free(watch); } -static SpiceCoreInterfaceInternal event_loop_core = { +SpiceCoreInterfaceInternal event_loop_core = { .timer_add = timer_add, .timer_start = timer_start, .timer_cancel = timer_cancel, @@ -185,6 +177,4 @@ static SpiceCoreInterfaceInternal event_loop_core = { .watch_add = watch_add, .watch_update_mask = watch_update_mask, .watch_remove = watch_remove, - - .channel_event = event_loop_channel_event }; diff --git a/server/red-common.h b/server/red-common.h index 253dc457..90a7d201 100644 --- a/server/red-common.h +++ b/server/red-common.h @@ -52,6 +52,10 @@ struct SpiceCoreInterfaceInternal { void (*watch_remove)(SpiceWatch *watch); void (*channel_event)(int event, SpiceChannelEventInfo *info); + + GMainContext *main_context; }; +extern SpiceCoreInterfaceInternal event_loop_core; + #endif diff --git a/server/tests/Makefile.am b/server/tests/Makefile.am index 6f02c995..fea21816 100644 --- a/server/tests/Makefile.am +++ b/server/tests/Makefile.am @@ -30,9 +30,9 @@ libtest_a_SOURCES = \ LDADD = \ libtest.a \ $(top_builddir)/spice-common/common/libspice-common.la \ - $(top_builddir)/server/libspice-server.la \ + $(top_builddir)/server/libserver.la \ $(GLIB2_LIBS) \ - $(SPICE_NONPKGCONFIG_LIBS) \ + $(SPICE_NONPKGCONFIG_LIBS) \ $(NULL) noinst_PROGRAMS = \ @@ -70,8 +70,6 @@ noinst_LIBRARIES += \ spice_server_replay_SOURCES = replay.c -stream_test_LDADD = ../libserver.la $(LDADD) - stat_test_SOURCES = stat-main.c stat_test_LDADD = \ libstat_test1.a \ diff --git a/server/tests/basic_event_loop.c b/server/tests/basic_event_loop.c index 81e70b76..3f1bc71d 100644 --- a/server/tests/basic_event_loop.c +++ b/server/tests/basic_event_loop.c @@ -43,19 +43,12 @@ GMainContext *basic_event_loop_get_context(void) return main_context; } -static inline GMainContext *event_loop_context_from_iface(const SpiceCoreInterfaceInternal *iface) -{ - return main_context; -} - static void event_loop_channel_event(int event, SpiceChannelEventInfo *info) { DPRINTF(0, "channel event con, type, id, event: %d, %d, %d, %d", info->connection_id, info->type, info->id, event); } -#include "../event-loop.tmpl.c" - void basic_event_loop_mainloop(void) { GMainLoop *loop = g_main_loop_new(main_context, FALSE); @@ -91,7 +84,6 @@ static SpiceCoreInterface core = { }, .timer_add = base_timer_add, .watch_add = base_watch_add, - .channel_event = event_loop_channel_event, }; SpiceCoreInterface *basic_event_loop_init(void) @@ -104,6 +96,9 @@ SpiceCoreInterface *basic_event_loop_init(void) core.timer_remove = event_loop_core.timer_remove; core.watch_update_mask = event_loop_core.watch_update_mask; core.watch_remove = event_loop_core.watch_remove; + event_loop_core.channel_event = core.channel_event = event_loop_channel_event; + event_loop_core.main_context = main_context; + return &core; } |