summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2010-11-08 01:48:42 +0200
committerAlon Levy <alevy@redhat.com>2011-03-02 17:27:50 +0200
commit111cf51103b1f3aa6820fac9f50da6c6be41f711 (patch)
tree31e3513113e12c33d51f6382af4a58cd99a855f1 /server
parentf7a99f858efd484ec890eebd24c8f92002722e9b (diff)
downloadspice-111cf51103b1f3aa6820fac9f50da6c6be41f711.tar.gz
spice-111cf51103b1f3aa6820fac9f50da6c6be41f711.tar.xz
spice-111cf51103b1f3aa6820fac9f50da6c6be41f711.zip
server/red_worker: add send_item
Diffstat (limited to 'server')
-rw-r--r--server/red_worker.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index ef457dc2..3af59242 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -350,6 +350,7 @@ typedef struct LocalCursor {
typedef struct RedChannel RedChannel;
typedef void (*channel_disconnect_proc)(RedChannel *channel);
typedef void (*channel_hold_pipe_item_proc)(RedChannel *channel, PipeItem *item);
+typedef void (*channel_send_pipe_item_proc)(RedChannel *channel, PipeItem *item);
typedef void (*channel_release_pipe_item_proc)(RedChannel *channel, PipeItem *item, int item_pushed);
typedef int (*channel_handle_parsed_proc)(RedChannel *channel, uint32_t size, uint16_t type, void *message);
@@ -389,6 +390,9 @@ struct RedChannel {
channel_hold_pipe_item_proc hold_item;
channel_release_pipe_item_proc release_item;
channel_handle_parsed_proc handle_parsed;
+ channel_send_pipe_item_proc send_item;
+
+ int during_send;
#ifdef RED_STATISTICS
struct {
@@ -8412,9 +8416,9 @@ static void display_channel_push(RedWorker *worker)
}
}
-static void cursor_channel_send_item(CursorChannel *cursor_channel, PipeItem *pipe_item)
+static void cursor_channel_send_item(RedChannel *channel, PipeItem *pipe_item)
{
- RedChannel *channel = &cursor_channel->common.base;
+ CursorChannel *cursor_channel = SPICE_CONTAINEROF(channel, CursorChannel, common.base);
red_ref_channel(channel);
red_channel_reset_send_data(channel);
@@ -8463,7 +8467,7 @@ static void cursor_channel_push(RedWorker *worker)
PipeItem *pipe_item;
while ((pipe_item = red_channel_pipe_get((RedChannel *)worker->cursor_channel))) {
- cursor_channel_send_item(worker->cursor_channel, pipe_item);
+ cursor_channel_send_item(&worker->cursor_channel->common.base, pipe_item);
}
}
@@ -9355,6 +9359,7 @@ static RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_i
RedsStream *stream, int migrate,
event_listener_action_proc handler,
channel_disconnect_proc disconnect,
+ channel_send_pipe_item_proc send_item,
channel_hold_pipe_item_proc hold_item,
channel_release_pipe_item_proc release_item,
channel_handle_parsed_proc handle_parsed)
@@ -9390,6 +9395,7 @@ static RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_i
common->listener.action = handler;
common->listener.free = free_common_channel_from_listener;
channel->disconnect = disconnect;
+ channel->send_item = send_item;
channel->hold_item = hold_item;
channel->release_item = release_item;
channel->handle_parsed = handle_parsed;
@@ -9496,6 +9502,7 @@ static void handle_new_display_channel(RedWorker *worker, RedsStream *stream, in
SPICE_CHANNEL_DISPLAY, stream,
migrate, handle_channel_events,
red_disconnect_display,
+ display_channel_send_item,
display_channel_hold_pipe_item,
display_channel_release_item,
display_channel_handle_message))) {
@@ -9622,6 +9629,7 @@ static void red_connect_cursor(RedWorker *worker, RedsStream *stream, int migrat
SPICE_CHANNEL_CURSOR, stream, migrate,
handle_channel_events,
red_disconnect_cursor,
+ cursor_channel_send_item,
cursor_channel_hold_pipe_item,
cursor_channel_release_item,
red_channel_handle_message))) {