summaryrefslogtreecommitdiffstats
path: root/server/reds.c
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2011-09-08 02:16:24 +0300
committerAlon Levy <alevy@redhat.com>2011-10-25 09:20:45 +0200
commit80caf07e09efe14c67f89a3c01501a6a39681167 (patch)
tree8ea10bcfc0d206e73cb8ab87148479de999a3f91 /server/reds.c
parent691afbbab56cb7b42bafd97b80221b8486d6cc10 (diff)
downloadspice-80caf07e09efe14c67f89a3c01501a6a39681167.tar.gz
spice-80caf07e09efe14c67f89a3c01501a6a39681167.tar.xz
spice-80caf07e09efe14c67f89a3c01501a6a39681167.zip
[0.8 branch] server: add main_dispatcher
add main_dispatcher, a message passing mechanism for sending messages to the main thread. The main thread is the thread that implements SpiceCoreInterface, which is assumed to be a single thread. Similar to the async operation of red_worker, a socket pair is created and used to pass messages. The messages are a fixed size to ease parsing. A single message is defined to pass a channel_event. RHBZ: 746950 FDBZ: 41858 This patch is 0.8 branch only, for the master branch there should be a better approach to share code with red_dispatcher and ready the way for later adding more threads.
Diffstat (limited to 'server/reds.c')
-rw-r--r--server/reds.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/server/reds.c b/server/reds.c
index 8e83b990..0bb7e962 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -53,6 +53,7 @@
#include "red_common.h"
#include "red_dispatcher.h"
+#include "main_dispatcher.h"
#include "snd_worker.h"
#include <spice/stats.h>
#include "stat.h"
@@ -415,7 +416,7 @@ static void reds_channel_event(RedsStream *stream, int event)
{
if (core->base.minor_version < 3 || core->channel_event == NULL)
return;
- core->channel_event(event, &stream->info);
+ main_dispatcher_channel_event(event, &stream->info);
}
static ssize_t stream_write_cb(RedsStream *s, const void *buf, size_t size)
@@ -4685,6 +4686,7 @@ static int do_spice_init(SpiceCoreInterface *core_interface)
reds->outgoing.vec = reds->outgoing.vec_buf;
init_vd_agent_resources();
+ main_dispatcher_init(core);
if (!(reds->mig_timer = core->timer_add(migrate_timeout, NULL))) {
red_error("migration timer create failed");