From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> Various changes in RedWorker and CursorChannel related to error and warning messages. Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> --- server/cursor-channel.c | 28 ++++++++++++++++++++-------- server/red_worker.c | 22 ++++++++++------------ server/red_worker.h | 1 - 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/server/cursor-channel.c b/server/cursor-channel.c index 5222bd8..ecb49b2 100644 --- a/server/cursor-channel.c +++ b/server/cursor-channel.c @@ -152,7 +152,8 @@ void cursor_channel_disconnect(CursorChannel *cursor) static void put_cursor_pipe_item(CursorChannelClient *ccc, CursorPipeItem *pipe_item) { - spice_assert(pipe_item); + spice_return_if_fail(pipe_item); + spice_return_if_fail(pipe_item->refs > 0); if (--pipe_item->refs) { return; @@ -239,7 +240,7 @@ static void cursor_marshall(RedChannelClient *rcc, PipeItem *pipe_item = &cursor_pipe_item->base; RedCursorCmd *cmd; - spice_assert(cursor_channel); + spice_return_if_fail(cursor_channel); cmd = cursor->red_cursor; switch (cmd->type) { @@ -327,7 +328,9 @@ static void cursor_channel_send_item(RedChannelClient *rcc, PipeItem *pipe_item) static CursorPipeItem *cursor_pipe_item_ref(CursorPipeItem *item) { - spice_assert(item); + spice_return_val_if_fail(item, NULL); + spice_return_val_if_fail(item->refs > 0, NULL); + item->refs++; return item; } @@ -336,7 +339,9 @@ static CursorPipeItem *cursor_pipe_item_ref(CursorPipeItem *item) static void cursor_channel_hold_pipe_item(RedChannelClient *rcc, PipeItem *item) { CursorPipeItem *cursor_pipe_item; - spice_assert(item); + + spice_return_if_fail(item); + cursor_pipe_item = SPICE_CONTAINEROF(item, CursorPipeItem, base); cursor_pipe_item_ref(cursor_pipe_item); } @@ -383,6 +388,12 @@ CursorChannelClient* cursor_channel_client_new(CursorChannel *cursor, RedClient uint32_t *common_caps, int num_common_caps, uint32_t *caps, int num_caps) { + spice_return_val_if_fail(cursor, NULL); + spice_return_val_if_fail(client, NULL); + spice_return_val_if_fail(stream, NULL); + spice_return_val_if_fail(!num_common_caps || common_caps, NULL); + spice_return_val_if_fail(!num_caps || caps, NULL); + CursorChannelClient *ccc = (CursorChannelClient*)common_channel_new_client(&cursor->common, sizeof(CursorChannelClient), @@ -393,11 +404,11 @@ CursorChannelClient* cursor_channel_client_new(CursorChannel *cursor, RedClient num_common_caps, caps, num_caps); - if (!ccc) { - return NULL; - } + spice_return_val_if_fail(ccc != NULL, NULL); + ring_init(&ccc->cursor_cache_lru); ccc->cursor_cache_available = CLIENT_CURSOR_CACHE_SIZE; + return ccc; } @@ -431,7 +442,8 @@ void cursor_channel_process_cmd(CursorChannel *cursor, RedCursorCmd *cursor_cmd, cursor->cursor_trail_frequency = cursor_cmd->u.trail.frequency; break; default: - spice_error("invalid cursor command %u", cursor_cmd->type); + spice_warning("invalid cursor command %u", cursor_cmd->type); + return; } if (red_channel_is_connected(&cursor->common.base) && (cursor->mouse_mode == SPICE_MOUSE_MODE_SERVER || diff --git a/server/red_worker.c b/server/red_worker.c index 2967c91..b93676e 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -4214,7 +4214,7 @@ static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size, int *ri break; } default: - spice_error("bad command type"); + spice_warning("bad command type"); } n++; } @@ -9909,19 +9909,15 @@ static void red_connect_cursor(RedWorker *worker, RedClient *client, RedsStream CursorChannel *channel; CursorChannelClient *ccc; - if (worker->cursor_channel == NULL) { - spice_warning("cursor channel was not created"); - return; - } + spice_return_if_fail(worker->cursor_channel != NULL); + channel = worker->cursor_channel; spice_info("add cursor channel client"); ccc = cursor_channel_client_new(channel, client, stream, migrate, common_caps, num_common_caps, caps, num_caps); - if (!ccc) { - return; - } + spice_return_if_fail(ccc != NULL); #ifdef RED_STATISTICS channel->stat = stat_add_node(worker->stat, "cursor_channel", TRUE); channel->common.base.out_bytes_counter = stat_add_counter(channel->stat, "out_bytes", TRUE); @@ -10622,10 +10618,12 @@ void handle_dev_cursor_channel_create(void *opaque, void *payload) RedWorker *worker = opaque; RedChannel *red_channel; - // TODO: handle seemless migration. Temp, setting migrate to FALSE if (!worker->cursor_channel) { worker->cursor_channel = cursor_channel_new(worker); + } else { + spice_warning("cursor channel already created"); } + red_channel = &worker->cursor_channel->common.base; send_data(worker->channel, &red_channel, sizeof(RedChannel *)); } @@ -10652,7 +10650,6 @@ void handle_dev_cursor_disconnect(void *opaque, void *payload) RedChannelClient *rcc = msg->rcc; spice_info("disconnect cursor client"); - spice_assert(rcc); red_channel_client_disconnect(rcc); } @@ -10662,7 +10659,6 @@ void handle_dev_cursor_migrate(void *opaque, void *payload) RedChannelClient *rcc = msg->rcc; spice_info("migrate cursor client"); - spice_assert(rcc); if (!red_channel_client_is_connected(rcc)) return; @@ -10744,8 +10740,10 @@ void handle_dev_set_mouse_mode(void *opaque, void *payload) RedWorkerMessageSetMouseMode *msg = payload; RedWorker *worker = opaque; + spice_info("mouse mode %u", msg->mode); + spice_return_if_fail(worker->cursor_channel); + worker->cursor_channel->mouse_mode = msg->mode; - spice_info("mouse mode %u", worker->cursor_channel->mouse_mode); } void handle_dev_add_memslot_async(void *opaque, void *payload) diff --git a/server/red_worker.h b/server/red_worker.h index aa97707..df52abd 100644 --- a/server/red_worker.h +++ b/server/red_worker.h @@ -61,7 +61,6 @@ typedef struct VerbItem { static inline void red_marshall_verb(RedChannelClient *rcc, VerbItem *item) { - spice_assert(rcc); red_channel_client_init_send_data(rcc, item->verb, NULL); } -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel