red_channel: prevent adding and pushing pipe items after a channel_client has diconnected
red_channel: prevent adding and pushing pipe items after a channel_client has diconnected

Fixes: leaks of pipe items & "red_client_destroy: assertion `rcc->send_data.size == 0'"

red_channel_disconnect clears the pipe. It is called only once. After,
it was called, not items should be added to the pipe.

An example of when this assert can occur:
on_new_cursor_channel (red_worker.c), pushes 2 pipe items.
When it pushes the first pipe item, if the client has disconnected,
it can hit a socket error, and then, red_channel_client_disconnect is called.
The second call to adding a pipe item, will add the item to
the pipe. red_channel_client_pipe_add_type also calls
red_channel_client_push, which will update the send_data.size.
Then, the push will also hit a socket error, but red_channel_client_disconnect
won't clear the pending pipe item again, since it was already called.
When red_client_destory is called, we hit assertion `rcc->send_data.size
== 0'.
Note that if a pipe item is added to the pipe after
red_channel_client_disconnect was called, but without pushing it,
we should hit "spice_assert(rcc->pipe_size == 0)".

freedesktop-unofficial-mirror/spice__spice,ya-mouse/spice,alon/spice-server,fgouget/spice,Fantu/spice,ya-mouse/spice,Fantu/spice,ya-mouse/spice,alon/spice-server,freedesktop-unofficial-mirror/spice__spice,freedesktop-unofficial-mirror/spice__spice,fgouget/spice,elmarco/spice,alon/spice-server,freedesktop-unofficial-mirror/spice__spice,alon/spice-server,elmarco/spice,Fantu/spice,elmarco/spice,Fantu/spice,SPICE/spice,elmarco/spice,SPICE/spice,alon/spice-server,fgouget/spice,fgouget/spice,freedesktop-unofficial-mirror/spice__spice,SPICE/spice,elmarco/spice