[Spice-devel] [PATCH 3.7/12] __new_channel -> red_worker_new_channel()
Jonathon Jongsma
jjongsma at redhat.com
Thu Oct 29 14:54:44 PDT 2015
From: Marc-André Lureau <marcandre.lureau at gmail.com>
Rename and lightly refactor the function that creates new common
channels for RedWorker (essentially Cursor and Display channels).
Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
---
server/cursor-channel.c | 25 ++++++++++-----------
server/red_worker.c | 59 ++++++++++++++++++++++---------------------------
server/red_worker.h | 14 ++++--------
3 files changed, 42 insertions(+), 56 deletions(-)
diff --git a/server/cursor-channel.c b/server/cursor-channel.c
index 24b7362..9c4bf1e 100644
--- a/server/cursor-channel.c
+++ b/server/cursor-channel.c
@@ -364,22 +364,21 @@ static void cursor_channel_release_item(RedChannelClient *rcc, PipeItem *item, i
CursorChannel* cursor_channel_new(RedWorker *worker)
{
- CursorChannel* cursor;
+ CursorChannel *cursor;
+ RedChannel *channel = NULL;
+ ChannelCbs cbs = {
+ .on_disconnect = cursor_channel_client_on_disconnect,
+ .send_item = cursor_channel_send_item,
+ .hold_item = cursor_channel_hold_pipe_item,
+ .release_item = cursor_channel_release_item
+ };
spice_info("create cursor channel");
- cursor = (CursorChannel *)__new_channel(
- worker, sizeof(CursorChannel),
- SPICE_CHANNEL_CURSOR,
- 0,
- cursor_channel_client_on_disconnect,
- cursor_channel_send_item,
- cursor_channel_hold_pipe_item,
- cursor_channel_release_item,
- red_channel_client_handle_message,
- NULL,
- NULL,
- NULL);
+ channel = red_worker_new_channel(worker, sizeof(CursorChannel),
+ SPICE_CHANNEL_CURSOR, 0,
+ &cbs, red_channel_client_handle_message);
+ cursor = (CursorChannel *)channel;
cursor->cursor_visible = TRUE;
cursor->mouse_mode = SPICE_MOUSE_MODE_SERVER;
diff --git a/server/red_worker.c b/server/red_worker.c
index 0c8ba4c..52fe132 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -9558,38 +9558,30 @@ DisplayChannelClient *display_channel_client_create(CommonChannel *common,
return dcc;
}
-RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_type,
- int migration_flags,
- channel_disconnect_proc on_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,
- channel_handle_migrate_flush_mark_proc handle_migrate_flush_mark,
- channel_handle_migrate_data_proc handle_migrate_data,
- channel_handle_migrate_data_get_serial_proc migrate_get_serial)
+RedChannel *red_worker_new_channel(RedWorker *worker, int size,
+ uint32_t channel_type, int migration_flags,
+ ChannelCbs *channel_cbs,
+ channel_handle_parsed_proc handle_parsed)
{
RedChannel *channel = NULL;
CommonChannel *common;
- ChannelCbs channel_cbs = { NULL, };
-
- channel_cbs.config_socket = common_channel_config_socket;
- channel_cbs.on_disconnect = on_disconnect;
- channel_cbs.send_item = send_item;
- channel_cbs.hold_item = hold_item;
- channel_cbs.release_item = release_item;
- channel_cbs.alloc_recv_buf = common_alloc_recv_buf;
- channel_cbs.release_recv_buf = common_release_recv_buf;
- channel_cbs.handle_migrate_flush_mark = handle_migrate_flush_mark;
- channel_cbs.handle_migrate_data = handle_migrate_data;
- channel_cbs.handle_migrate_data_get_serial = migrate_get_serial;
+
+ spice_return_val_if_fail(worker, NULL);
+ spice_return_val_if_fail(channel_cbs, NULL);
+ spice_return_val_if_fail(!channel_cbs->config_socket, NULL);
+ spice_return_val_if_fail(!channel_cbs->alloc_recv_buf, NULL);
+ spice_return_val_if_fail(!channel_cbs->release_recv_buf, NULL);
+
+ channel_cbs->config_socket = common_channel_config_socket;
+ channel_cbs->alloc_recv_buf = common_alloc_recv_buf;
+ channel_cbs->release_recv_buf = common_release_recv_buf;
channel = red_channel_create_parser(size, &worker_core,
channel_type, worker->qxl->id,
TRUE /* handle_acks */,
spice_get_client_channel_parser(channel_type, NULL),
handle_parsed,
- &channel_cbs,
+ channel_cbs,
migration_flags);
common = (CommonChannel *)channel;
if (!channel) {
@@ -9738,25 +9730,26 @@ static void display_channel_release_item(RedChannelClient *rcc, PipeItem *item,
static void display_channel_create(RedWorker *worker, int migrate)
{
DisplayChannel *display_channel;
+ ChannelCbs cbs = {
+ .on_disconnect = display_channel_client_on_disconnect,
+ .send_item = display_channel_send_item,
+ .hold_item = display_channel_hold_pipe_item,
+ .release_item = display_channel_release_item,
+ .handle_migrate_flush_mark = display_channel_handle_migrate_mark,
+ .handle_migrate_data = display_channel_handle_migrate_data,
+ .handle_migrate_data_get_serial = display_channel_handle_migrate_data_get_serial
+ };
if (worker->display_channel) {
return;
}
spice_info("create display channel");
- if (!(worker->display_channel = (DisplayChannel *)__new_channel(
+ if (!(worker->display_channel = (DisplayChannel *)red_worker_new_channel(
worker, sizeof(*display_channel),
SPICE_CHANNEL_DISPLAY,
SPICE_MIGRATE_NEED_FLUSH | SPICE_MIGRATE_NEED_DATA_TRANSFER,
- display_channel_client_on_disconnect,
- display_channel_send_item,
- display_channel_hold_pipe_item,
- display_channel_release_item,
- display_channel_handle_message,
- display_channel_handle_migrate_mark,
- display_channel_handle_migrate_data,
- display_channel_handle_migrate_data_get_serial
- ))) {
+ &cbs, display_channel_handle_message))) {
spice_warning("failed to create display channel");
return;
}
diff --git a/server/red_worker.h b/server/red_worker.h
index 795959d..76502b6 100644
--- a/server/red_worker.h
+++ b/server/red_worker.h
@@ -118,16 +118,10 @@ RedWorker* red_worker_new(QXLInstance *qxl, RedDispatcher *red_dispatcher);
bool red_worker_run(RedWorker *worker);
QXLInstance* red_worker_get_qxl(RedWorker *worker);
-RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_type,
- int migration_flags,
- channel_disconnect_proc on_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,
- channel_handle_migrate_flush_mark_proc handle_migrate_flush_mark,
- channel_handle_migrate_data_proc handle_migrate_data,
- channel_handle_migrate_data_get_serial_proc migrate_get_serial);
+RedChannel *red_worker_new_channel(RedWorker *worker, int size,
+ uint32_t channel_type, int migration_flags,
+ ChannelCbs *channel_cbs,
+ channel_handle_parsed_proc handle_parsed);
CommonChannelClient *common_channel_new_client(CommonChannel *common,
int size,
--
2.4.3
More information about the Spice-devel
mailing list