On 05/08/2013 10:46 AM, Marc-André Lureau wrote:
ack (would be nice to describe the motivation, although I guess it is to
avoid code duplication)
Sure, I'll add a comment. I did it because I believe main_dispatcher
role is only to pass events to the main thread, and not handle the
events by itself.
On Wed, May 8, 2013 at 4:06 PM, Yonit Halperin <yhalperi@xxxxxxxxxx
<mailto:yhalperi@xxxxxxxxxx>> wrote:
---
server/main_dispatcher.c | 5 +----
server/reds.c | 19 ++++++++++++++-----
server/reds.h | 4 ++++
3 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/server/main_dispatcher.c b/server/main_dispatcher.c
index 8402402..92b0791 100644
--- a/server/main_dispatcher.c
+++ b/server/main_dispatcher.c
@@ -64,10 +64,7 @@ static void
main_dispatcher_self_handle_channel_event(
int event,
SpiceChannelEventInfo *info)
{
- main_dispatcher.core->channel_event(event, info);
- if (event == SPICE_CHANNEL_EVENT_DISCONNECTED) {
- free(info);
- }
+ reds_handle_channel_event(event, info);
}
static void main_dispatcher_handle_channel_event(void *opaque,
diff --git a/server/reds.c b/server/reds.c
index b8db905..a378f80 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -189,11 +189,20 @@ static ChannelSecurityOptions
*find_channel_security(int id)
return now;
}
-static void reds_stream_channel_event(RedsStream *s, int event)
+static void reds_stream_push_channel_event(RedsStream *s, int event)
+{
+ main_dispatcher_channel_event(event, s->info);
+}
+
+void reds_handle_channel_event(int event, SpiceChannelEventInfo *info)
{
if (core->base.minor_version < 3 || core->channel_event == NULL)
return;
- main_dispatcher_channel_event(event, s->info);
+
+ core->channel_event(event, info);
+ if (event == SPICE_CHANNEL_EVENT_DISCONNECTED) {
+ free(info);
+ }
}
static ssize_t stream_write_cb(RedsStream *s, const void *buf,
size_t size)
@@ -1524,7 +1533,7 @@ static void reds_info_new_channel(RedLinkInfo
*link, int connection_id)
link->stream->info->connection_id = connection_id;
link->stream->info->type = link->link_mess->channel_type;
link->stream->info->id = link->link_mess->channel_id;
- reds_stream_channel_event(link->stream,
SPICE_CHANNEL_EVENT_INITIALIZED);
+ reds_stream_push_channel_event(link->stream,
SPICE_CHANNEL_EVENT_INITIALIZED);
}
static void reds_send_link_result(RedLinkInfo *link, uint32_t error)
@@ -2845,7 +2854,7 @@ static RedLinkInfo
*reds_init_client_connection(int socket)
getpeername(stream->socket, (struct
sockaddr*)(&stream->info->paddr_ext),
&stream->info->plen_ext);
- reds_stream_channel_event(stream, SPICE_CHANNEL_EVENT_CONNECTED);
+ reds_stream_push_channel_event(stream,
SPICE_CHANNEL_EVENT_CONNECTED);
openssl_init(link);
@@ -4573,7 +4582,7 @@ void reds_stream_free(RedsStream *s)
return;
}
- reds_stream_channel_event(s, SPICE_CHANNEL_EVENT_DISCONNECTED);
+ reds_stream_push_channel_event(s,
SPICE_CHANNEL_EVENT_DISCONNECTED);
#if HAVE_SASL
if (s->sasl.conn) {
diff --git a/server/reds.h b/server/reds.h
index 59f13ce..c5c557d 100644
--- a/server/reds.h
+++ b/server/reds.h
@@ -111,11 +111,15 @@ typedef struct RedsMigSpice {
int sport;
} RedsMigSpice;
+/* any thread */
ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte);
ssize_t reds_stream_write(RedsStream *s, const void *buf, size_t
nbyte);
ssize_t reds_stream_writev(RedsStream *s, const struct iovec *iov,
int iovcnt);
void reds_stream_free(RedsStream *s);
+/* main thread only */
+void reds_handle_channel_event(int event, SpiceChannelEventInfo *info);
+
void reds_disable_mm_timer(void);
void reds_enable_mm_timer(void);
void reds_update_mm_timer(uint32_t mm_time);
--
1.8.1.4
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
<mailto:Spice-devel@xxxxxxxxxxxxxxxxxxxxx>
http://lists.freedesktop.org/mailman/listinfo/spice-devel
--
Marc-André Lureau
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel