> > 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. > --- > server/Makefile.am | 2 +- > server/{event-loop.tmpl.c => event-loop.c} | 20 +++++--------------- > server/red-common.h | 4 ++++ > server/tests/Makefile.am | 6 ++---- > server/tests/basic_event_loop.c | 11 +++-------- > 5 files changed, 15 insertions(+), 28 deletions(-) > rename server/{event-loop.tmpl.c => event-loop.c} (87%) > > diff --git a/server/Makefile.am b/server/Makefile.am > index bef999d..92b716f 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 > similarity index 87% > rename from server/event-loop.tmpl.c > rename to server/event-loop.c > index 9d253d9..4738ed9 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 253dc45..90a7d20 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 6f02c99..fea2181 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 81e70b7..3f1bc71 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; > } > Acked-by: Frediano Ziglio <fziglio@xxxxxxxxxx> Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel